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