【发布时间】:2011-09-16 07:27:13
【问题描述】:
我对@987654323@ Microsoft .NET 命名空间有疑问。在这个命名空间中,定义了许多类以帮助我管理线程。 好吧,我有一个问题,但我不知道该使用什么,MSDN 含糊不清,我仍然不知道什么类做什么。特别是,我的问题与同步有关。
问题
我有一定数量的线程(考虑 N 个线程)。 在某个时刻,一个线程必须停止并等待至少一个其他线程来做某事。 一旦 N - 1 个线程中的一个完成了某项任务,该线程就会通知并且停止的线程将能够继续。
所以这只是一个同步问题:线程必须等待发出信号,仅此而已。
许多类
在System.Threading 中提供了许多类来处理同步问题。有WaitHandle(s),有AutoResetEvent(s),有ManualResetEvent(s)等等……
我该用哪一个?
问题
我的问题是:谁能总结一下我应该使用哪个课程来解决我的问题?您能说出这些类或其他类之间最重要的区别吗?
关键是我还没有真正理解在同步问题中哪个类负责:例如,WaitHandle 和 AutoResetEvent 或 ManualResetEvent 之间有什么区别?
锁呢?
为了处理许多线程问题,.net 提供了lock 功能和Monitor 类。这对夫妇适合我的需要吗?
谢谢
【问题讨论】:
-
您可能会发现Task Parallel Library 很有用,具体取决于。
-
@Ozair 该帖子是关于特定通知的,并不总是最好的。请参阅 Marcs 的回答并注意有关“缺少消息”的备注。
-
BTW
AutoResetEvent和ManualResetEvents 都是WaitHandles,它们只是包装了WaitHandle的 ctor 并将不同的参数传递给它,因此它将是自动重置或手动重置。无论哪种方式,您都在使用等待句柄,这大大简化了您需要查找的信息量 -
此外,当您说线程必须发出信号时,请记住,我们假设您此时不需要传递任何信息,只需发出信号以继续。如果该假设不正确,请改写问题:)
标签: c# .net multithreading synchronization signals