首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候应该使用WaitHandle而不是锁?

什么时候应该使用WaitHandle而不是锁?
EN

Stack Overflow用户
提问于 2011-04-29 21:34:30
回答 6查看 2K关注 0票数 4

C#中,什么时候应该使用WaitHandle而不是lock

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-29 21:57:58

锁从根本上不同于WaitHandle。用你写的锁,例如:

代码语言:javascript
复制
lock (SomeResource)
{
    // do stuff here
}

第一行说,“我想独占访问该资源”,并将一直等到该资源可用(即没有其他人锁定它)。然后代码运行,最后锁被释放,以便其他人可以使用它。

WaitHandle用于等待某个事件发生。当你写的时候:

代码语言:javascript
复制
MyWaitHandle.WaitOne();

您的代码正在等待某个其他线程(可能在不同的进程中)发出该WaitHandle的信号。它发出的信号可能是任何东西。也许您正在等待另一个线程完成它的工作并说“我现在完成了”,然后您的代码才能继续。

因此,为了回答您的问题,当您希望获得对资源的独占访问时,您应该使用锁。当你想要得到一些事件的通知时,你应该使用WaitHandle

票数 6
EN

Stack Overflow用户

发布于 2011-04-29 21:43:21

他们完成了完全不同的事情。lock用于将对特定代码块的访问限制为一次只能访问单个线程。WaitHandle是几个与并发相关的类(如SemaphoreMutexAutoResetEventManualResetEvent )的基类,这些类允许您以稍微不同的方式控制并发。例如,Semaphore允许您将并发限制为不超过N个线程,而不是单个线程。

票数 3
EN

Stack Overflow用户

发布于 2011-04-29 21:36:00

一个WaitHandle可以等待多个句柄,一个锁只能等待一个句柄。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5832757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档