【问题标题】:Understanding multiple threads and EventWaitHandle了解多线程和 EventWaitHandle
【发布时间】:2015-06-30 04:06:07
【问题描述】:

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

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() 调用一次释放它们?

【问题讨论】:

    标签: c# multithreading locking blocking


    【解决方案1】:

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

    ManualResetEvent:在调用一次Set() 之后,线程将永远传递WaitOne(),除非您手动调用Reset()

    【讨论】:

    • 感谢您提供简短易懂的评论!当我看到这个时,我只是在与 ManualResetEvent 搏斗,并让多个线程同时使用它。问题解决了!非常感谢:)
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2017-05-15
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多