如何处理多个THREAD 合作同步的问题.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何处理多个THREAD 合作同步的问题

Thread Synchronization in User Mode 如何處理多個thread 合作同步的問題? Outline 出了甚麼問題? Without interrupt (保證 incrementing of the value is done atomically) Interlocked functions 簡介 InterLockedExchanged 使用範例 InterLockedChange 使用範例 InterLockedCompareExchage 簡介 Cache lines Outline Advanced Thread Synchronization Critical Sections 出了甚麼問題? 兩個 thread 同時存取一個global variable Without interrupt (保證 incrementing of the value is done atomically) Incrementing of the value is done atomically InterLockedExchangedAdd 使用範例 How do the interlocked functions work ? Depends on the CPU X86 ? assert a 硬體訊號 on the bus, 以防止其他 CPU 存取相同的記憶體位址 InterlockedChangeAdd 特性 多個 CPU 亦能保證 atomic 性質 速度非常快 (less than 50 cycles) 不會切換到 kernel model Interlocked functions 簡介: InterlockedExChange() InterlockedExChange的注意事項 Spin lock 非常浪費 CPU time 多 CPUs 的情況下,欲存取的資料與 lock variable 在不同的cache line 才會有效率(避免 race condition) 避免耗費大量 CPU time 的策略 讓給同樣 priority 等級的 thread 執行 若while 執行4000次,還沒搶到資源, 則進入 Kernel Mode 等待 (consuming no CPU time) Interlocked functions 簡介: Atomic test and set operation Cache lines 觀念 為了增進 CPU 執行效率, 一次會讀取 32 or 64-byte 到 cache 中,並且 aligned on 32 or 64-byte boundary 考量 multiprocessor Cache lines 衍生出的效率問題 應用程式中的資料應該以 Cache-line 大小為單位 group 起來 並且放到 cache-line boundaries ReadOnly 的變數與 Read/Write 變數分開 Poor designed data structure 強迫把資料放在另一個 cache line 完整的程式碼 Critical Sections 概念 甚麼是Critical Section? 是一程式區段, 而這個程式區段必須擁有某共用資源的權限才能執行 你可以放心的執行 Critical Section 的程式碼, 絕不會有其他的 thread 同時執行你所在的code 你的 thread 會被 preempt 換其他的thread 執行, 但是想要進入 Critical Section 的thread 是不會被 schedule的 系統不保證進入Critical Section thread 的順序,但OS保證公平對待所有要進入的thread 來看看, 不用Critical Section 會發生的問題 加入 Critical Section 解決問題 存取共享資源的程式碼一定要用 Critical Section 包起來 我們來看看Critical Section 的處理細節 在使用 Critical Section 之前,要先作初始化的動作 初始化後, Process 中的thread 才能呼叫 EnterCriticalSection(), TryEnterCriticalSection, LeaveCriticalSection() 你不該去更改 Critical object 的內容,你只要呼叫相關的function 操作即可 Critical Section 的處理細節 當 thread 已經擁有 c

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档