在阅读本文后,我认为最好使用Monitor/Lock进行线程同步,因为它不使用本机资源
具体报价(来自文章第5页):
Monitor.Wait/Pulse不是在一个线程中等待某事发生并且告诉该线程它在另一个线程中发生的唯一方法.Win32程序员长期以来一直在使用各种其他机制,这些机制由AutoResetEvent,ManualResetEvent和Mutex类公开,所有这些都派生自WaitHandle.所有这些类都在System.Threading命名空间中.(Win32 Semaphore机制在.NET 1.1中没有托管包装.它存在于.NET 2.0中,但是如果你需要在那之前使用它,你可以使用P/Invoke自己包装它,或者编写你自己的计数信号量类.)
有些人可能会惊讶地发现使用这些类可能比使用各种Monitor方法慢得多.我相信这是因为将托管代码"输出"到本机Win32调用并再次返回"in"与Monitor提供的完全托管视图相比是昂贵的.读者还解释了监视器是在用户模式下实现的,而使用等待句柄需要切换到内核模式,这是相当昂贵的.
但是,自从发现SO并阅读一些问题/答案后,我开始怀疑我对何时使用每个问题的理解.似乎许多人建议在Monitor.Wait/Pulse可以使用的情况下使用Auto/ManualResetEvent.任何人都可以向我解释基于WaitHandle的同步应该在Monitor上使用吗?
谢谢