C#线程读写锁

时间:2016-12-26 14:44:17

标签: c# .net multithreading

对于以下模式,最简洁的解决方案是什么?

给定一个读写一个文件/资源​​的类,提供已经实现的" read()"和"写()"功能。创建一个" Read()"和"写()"函数将包装" read()"和" write()"并防止线程干扰如下:

一个。允许多个线程读取

湾只允许一个线程写入 - 所以如果线程已经写入,则其他线程必须等待。

℃。在线程正在读取时必须防止写入,反之亦然

2 个答案:

答案 0 :(得分:2)

使用ReaderWriterLockSlimhttps://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