簡體   English   中英

Thread.Yield假設的解釋

[英]explanation to Thread.Yield assumption

有人可以向我解釋一下:

如果在代碼中的任意位置插入Thread.Yield()會破壞程序,則幾乎可以肯定會出現錯誤。

我在這里閱讀過: http : //www.albahari.com/threading/

我只能猜測作者的意圖,但是:線程調度已經不確定。 如果增加產量使它能夠工作,那么我推斷這里的現實是它依賴於競爭條件的副作用,即,將CPU分配給另一個線程可以使時間重合,從而發生正確的事情。 好吧,您不知道在並行系統上要獲得什么 ,而在軍用系統上,您很可能不屈服於同一件事(產量僅是同一CPU)。 這樣,唯一可行的方法就是使用諸如Monitor,Mutex,Semaphore,ResetEvent之類的結構,或其他一些旨在允許線程和(有時)進程之間進行受控流的鎖定原語。

我在這里討論的假設是Thread.Yield生成一個隱式內存屏障。 如果遇到內存障礙問題,可以通過添加對Thread.Yield的調用來Thread.Yield 這類似於使用Thread.Sleep模擬線程交織實際上可以掩蓋問題的方式。 同樣, Thread.Yield顯然會改變執行指令的時間,這可能會影響是否遵守競爭條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM