Pip*_*ine 2 c# multithreading locking blocking
我试图在网上找到这个代码段:
private EventWaitHandle wh = new AutoResetEvent();
private void WorkerThread()
{
while(true)
{
wh.WaitOne();
//Do work.
}
}
public void StartWorking()
{
wh.Set();
}
Run Code Online (Sandbox Code Playgroud)
所以我理解线程一旦命中WaitOne()它将阻塞直到调用Set(),但是如果多个线程到达.WaitOne()会怎么样?他们都会被封锁还是只有一个?如果调用Set(),它会释放所有线程还是只释放一个?
编辑 - 我正在阅读更多并尝试它和一个后续问题:如果ManualResetEvent完成了我上面描述的内容,当有多个线程同时等待时它的行为如何?只有一个Set()调用,AutoResetEvent会一次释放一个吗?
AutoResetEvent:一个Set()被叫之后,只有一个线程会通过WaitOne(); 其他线程仍在等待第二个Set().
ManualResetEvent:一次Set()调用后,线程将WaitOne()永远传递,除非你手动调用Reset().
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |