了解多个线程和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()来释放它们吗?

了解多个线程和EventWaitHandle

AutoResetEvent:调用一个Set()后,只有一个线程通过WaitOne();其他线程仍在等待第二个CCD_ 4。

ManualResetEvent:调用一个Set()后,线程将永远通过WaitOne(),除非您手动调用Reset()