如何在下面的问题中组织线程之间的同步?
我有两个主题,一个作家和一个读者。它们都使用共享资源。当读者询问数据块时,如果传输完成,则编写器开始写入或退出。然后,当写入所有数据块时,编写器等待下一个读者的请求。读者等待数据块准备就绪或者直到编写器完成。 所以,两个线程都是相互排斥的。
我不能使用yield等来完成任务,因为语言不支持它。
W ----- /---------\
R----/ \-------- --------
答案 0 :(得分:0)
答案 1 :(得分:0)
最简单的方法是使用信号量。在.net中,您可以使用locking。
答案 2 :(得分:0)
信号量是锁定数据的“经典”方式。
根据您的具体要求,您可能实际上可以更好地锁定更新版本的.Net中提供的“线程安全集合”(System.Collections.Concurrent):
如果不是所有线程都在更新数据,您还可以通过读取器/写入器锁定来实现性能提升(与“简单锁定”相比):
'希望有所帮助