对Thread.Yield假设的解释

Ere*_*rez 2 .net c# multithreading race-condition

有人可以解释一下这个:

如果在代码中的任何地方插入Thread.Yield()会导致或破坏程序,那么几乎肯定会有错误.

我在这里阅读:http://www.albahari.com/threading/

Mar*_*ell 5

我只能猜测作者的意图,但是:线程调度已经不确定了.如果添加yield使其工作,那么我推断这里的现实是它依赖于竞争条件的副作用,即将一些CPU提供给另一个线程允许时间重合以便正确的事情发生.好吧,你不知道你在并行系统上会得到什么,而在一个milticore系统上,你很可能不会屈服于同样的事情(产量只是同一个CPU).这样,唯一明智的方式做到这一点是具有结构如监视器,互斥锁,信号灯,ResetEvent,或一些其它的锁定原始设计用于允许线程和(有时)的进程之间的受控流动.