了解多线程和 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()
.
我试图理解我在网上找到的这段代码:
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()
.