在C#中,什么时候应该使用WaitHandle而不是lock?
发布于 2011-04-29 21:57:58
锁从根本上不同于WaitHandle。用你写的锁,例如:
lock (SomeResource)
{
// do stuff here
}第一行说,“我想独占访问该资源”,并将一直等到该资源可用(即没有其他人锁定它)。然后代码运行,最后锁被释放,以便其他人可以使用它。
WaitHandle用于等待某个事件发生。当你写的时候:
MyWaitHandle.WaitOne();您的代码正在等待某个其他线程(可能在不同的进程中)发出该WaitHandle的信号。它发出的信号可能是任何东西。也许您正在等待另一个线程完成它的工作并说“我现在完成了”,然后您的代码才能继续。
因此,为了回答您的问题,当您希望获得对资源的独占访问时,您应该使用锁。当你想要得到一些事件的通知时,你应该使用WaitHandle。
发布于 2011-04-29 21:43:21
他们完成了完全不同的事情。lock用于将对特定代码块的访问限制为一次只能访问单个线程。WaitHandle是几个与并发相关的类(如Semaphore、Mutex、AutoResetEvent和ManualResetEvent )的基类,这些类允许您以稍微不同的方式控制并发。例如,Semaphore允许您将并发限制为不超过N个线程,而不是单个线程。
发布于 2011-04-29 21:36:00
一个WaitHandle可以等待多个句柄,一个锁只能等待一个句柄。
https://stackoverflow.com/questions/5832757
复制相似问题