了解多线程和 EventWaitHandle

Understanding multiple threads and EventWaitHandle

我试图理解我在网上找到的这段代码:

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().