这是线程等待/脉冲的有效实现吗?

时间:2011-12-18 22:19:01

标签: c# .net multithreading locking

正如标题所说,这是一个有效的实施吗?我知道lock语句的问题,但由于要求必须使用它。这段代码有效吗?

lock (richTextBox)
{
    Monitor.Wait(richTextBox);
    richTextBox.AppendText("Text");
    Monitor.PulseAll(richTextBox);
}

1 个答案:

答案 0 :(得分:2)

这段代码没有意义,因为每个线程都会在Monitor.Wait上阻塞,除非其他一些代码块调用Monitor.PulseAll,否则不会释放任何线程。通常在生产者/消费者类型场景中使用等待/脉冲(即一个或多个线程正在等待另一个线程完成某些任务或提供一些数据)。

如果您对使用lock语句而不是Monitor.Enter / Monitor.Exit提出更多疑问,那么该部分就可以了。

根据MSDN文章:

lock(obj) { ... } 

应与:

相同
Monitor.Enter(obj); try { ... } finally { Monitor.Exit(obj); }
相关问题