对于以下模式,最简洁的解决方案是什么?
给定一个读写一个文件/资源的类,提供已经实现的" read()"和"写()"功能。创建一个" Read()"和"写()"函数将包装" read()"和" write()"并防止线程干扰如下:
一个。允许多个线程读取
湾只允许一个线程写入 - 所以如果线程已经写入,则其他线程必须等待。
℃。在线程正在读取时必须防止写入,反之亦然
答案 0 :(得分:2)
使用ReaderWriterLockSlim
(https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim(v=vs.110).aspx)作为最有效的构造。
来自MSDN:
ReaderWriterLockSlim类似于ReaderWriterLock,但它简化了递归规则以及升级和降级锁定状态的规则。 ReaderWriterLockSlimavoids有很多潜在的死锁案例。此外,ReaderWriterLockSlim的性能明显优于ReaderWriterLock。建议将ReaderWriterLockSlim用于所有新开发。
答案 1 :(得分:0)
正如评论中所指出的,已经有一个完善的模式来解决这个问题 - reader-writer locks。这种模式与您描述的完全一致 - 在任何给定时间,您都可以 任意数量的读者或单个作家。
此模式的.NET Framework already has an implementation。