gpt4 book ai didi

c# - Monitor.Wait - while 或者 if?

转载 作者:太空狗 更新时间:2023-10-29 22:23:54 26 4
gpt4 key购买 nike

目前,我正在学习多线程考试。我读了the good threading article of albahari .我对监视器的使用有疑问 - 为什么这里使用循环代替 if?

lock (_locker)
{
while (!_go) //why while and not if?
Monitor.Wait (_locker); // _lock is released
// lock is regained
...
}

我认为,如果就足够了。

恐怕我没有完全理解这篇文章。

//编辑示例代码:

class SimpleWaitPulse
{
static readonly object _locker = new object();
static bool _go;

static void Main()
{ // The new thread will block
new Thread (Work).Start(); // because _go==false.

Console.ReadLine(); // Wait for user to hit Enter

lock (_locker) // Let's now wake up the thread by
{ // setting _go=true and pulsing.
_go = true;
Monitor.Pulse (_locker);
}
}

static void Work()
{
lock (_locker)
while (!_go)
Monitor.Wait (_locker); // Lock is released while we’re waiting

Console.WriteLine ("Woken!!!");
}
}

最佳答案

视情况而定。在这种情况下,代码只是在等待 _gotrue

每次 _locker 发出脉冲时,它都会检查 _go 是否已设置为 true。如果 _go 仍然是 false,它将等待下一个脉冲。

如果使用 if 而不是 while,它只会等待一次(如果 _go 已经 true),然后会在一个脉冲后继续,而不管 _go 的新状态如何。

所以如何使用 Monitor.Wait() 完全取决于您的具体需求。

关于c# - Monitor.Wait - while 或者 if?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com