C#中的条件变量

Ton*_*ion 9 c# multithreading monitor

是否在C#中使用了条件变量和监视器?

有人能举个例子吗?

Han*_*ant 13

在.NET中仅用于信令的条件变量的等价物是抽象的WaitHandle类.它的实际实现是ManualResetEvent和AutoResetEvent类.

用作监视器的条件变量需要System.Threading.Monitor.C#lock语句使它非常易于使用,它确保始终退出监视器而无需显式编程Exit()调用.

  • 等等(原谅双关语).这些中的任何一个实际上是条件变量的直接等价物吗?对于我的非专家眼睛,他们不像条件变量.事实上,我已经看到一个网页,它显示了如何从Windows内核对象(如自动重置事件)构建条件变量,这是一个非常复杂的过程,涉及多个这样的内核对象...... (5认同)
  • 我同意@mackenir - 说'WaitHandle`与条件变量相同会导致像http://stackoverflow.com/questions/18276944/do-wait-handles-in-net-release-locks-that这样的误解-a线程获取 (3认同)
  • 请注意,如果代码抛出异常,退出监视器不一定是好事; 监视器可能正在保护突变,以确保退出监视器时的结果是一致的; 一个例外是证据表明变异只是部分完成,因此您刚刚解锁了对不一致状态的访问.如果捕获到异常并且程序继续,那么您不能依赖程序状态是否一致. (2认同)