C# 了解多线程和EventWaitHandle
我试图理解我在网上找到的代码段:C# 了解多线程和EventWaitHandle,c#,multithreading,locking,blocking,C#,Multithreading,Locking,Blocking,我试图理解我在网上找到的代码段: private EventWaitHandle wh = new AutoResetEvent(); private void WorkerThread() { while(true) { wh.WaitOne(); //Do work. } } public void StartWorking() { wh.Set(); } 所以我知道线程一旦命中WaitOne(),它将阻塞,直到调用S
private EventWaitHandle wh = new AutoResetEvent();
private void WorkerThread()
{
while(true)
{
wh.WaitOne();
//Do work.
}
}
public void StartWorking()
{
wh.Set();
}
所以我知道线程一旦命中WaitOne(),它将阻塞,直到调用Set(),但是如果多个线程到达.WaitOne(),该怎么办?他们都会被封锁还是只有一个?如果调用Set(),它会释放所有线程还是只释放一个线程
编辑-我正在阅读更多内容并尝试它,还有一个后续问题:如果ManualResetEvent实现了我上面描述的功能,那么当有多个线程同时等待时,它的行为如何?AutoResetEvent是否会通过一次Set()调用一次释放一个线程?
AutoResetEvent
:调用一个Set()
后,只有一个线程将通过WaitOne()
;其他线程仍在等待第二个Set()
ManualResetEvent
:调用一个Set()
后,线程将永远通过WaitOne()
,除非您手动调用Reset()
,谢谢您的简短易懂的评论!当我看到这个的时候,我正在和ManualResetEvent搏斗,让多个线程同时消耗它。问题解决了!非常感谢:)