是否可以使用Pulse&等待?或者它是邪恶的并且是只写代码的原因?

时间:2008-12-11 16:19:13

标签: c# .net multithreading synchronization

Monitor.Pulse/AllMonitor.Wait是有用的方法,但是我抱怨大量使用它们(我有一个DSL设计师将它们吐出来),结果代码变为不可读。你觉得怎么样?

3 个答案:

答案 0 :(得分:1)

如果它遍及您实际必须阅读的所有代码,那可能是个问题。为什么它首先经常出现?功能是否可以实际封装在其他地方?

从根本上说,等待/脉冲没有任何问题 - 但与生活中的其他一切一样,如果使用不当,它将成为一个问题。如果没有看到代码,很难判断您的使用是否合适:(

答案 1 :(得分:0)

我真的建议反对这种方法 - 来自PulseEvent上的MSDN页面:

  

等待同步对象的线程可以通过内核模式APC暂时从等待状态中删除,然后在APC完成后返回到等待状态。如果在线程从等待状态中删除期间发生对PulseEvent的调用,则不会释放该线程,因为PulseEvent仅释放那些在被调用时正在等待的线程。因此, PulseEvent不可靠,不应被新应用程序使用。相反,使用条件变量。

现在,Monitor.Pulse可能是使用PulseEvent以外的东西编写的,但整个概念都有很大的缺陷 - 正确使用锁和条件变量。

答案 2 :(得分:-1)

听起来应该通过注射作为一个方面进行编码。但是,我对C#中AOP支持的了解可以忽略不计,所以我不能提供更多。

豫ICP备18024241号-1