正确互斥线程

时间:2013-01-11 19:14:31

标签: .net multithreading

如何在下面的问题中组织线程之间的同步?

我有两个主题,一个作家和一个读者。它们都使用共享资源。当读者询问数据块时,如果传输完成,则编写器开始写入或退出。然后,当写入所有数据块时,编写器等待下一个读者的请求。读者等待数据块准备就绪或者直到编写器完成。 所以,两个线程都是相互排斥的。

我不能使用yield等来完成任务,因为语言不支持它。

W     -----         /---------\
R----/     \--------           --------

3 个答案:

答案 0 :(得分:0)

这听起来像读者 - 作家问题:

听说过semaphors或类似的东西;)?

http://en.wikipedia.org/wiki/Readers-writers_problem

答案 1 :(得分:0)

最简单的方法是使用信号量。在.net中,您可以使用locking

答案 2 :(得分:0)

信号量是锁定数据的“经典”方式。

根据您的具体要求,您可能实际上可以更好地锁定更新版本的.Net中提供的“线程安全集合”(System.Collections.Concurrent):

如果不是所有线程都在更新数据,您还可以通过读取器/写入器锁定来实现性能提升(与“简单锁定”相比):

'希望有所帮助