了解多个线程和EventWaitHandle
本文关键字:EventWaitHandle 线程 了解 | 更新日期: 2023-09-27 18:00:22
我正在尝试理解我在网上找到的这个代码段:
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()
;其他线程仍在等待第二个CCD_ 4。
ManualResetEvent
:调用一个Set()
后,线程将永远通过WaitOne()
,除非您手动调用Reset()
。