[英]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.