我不完全确定如何最好地完成这种多线程场景,因此任何输入都会受到赞赏。
我有一个读取数据的块,几个线程可以同时访问。我有另一个写入数据的块,只有一个线程可以随时写入。只要任何线程正在读取数据,它也无法开始写入。 ReaderWriterLockSlim
是这样的方式,是否会在阻塞线程写入之前等待读取线程退出?
答案 0 :(得分:5)
是的,ReaderWriterLockSlim
非常适合频繁的读者/偶发作家场景。
行为正如您所猜测的那样 - 只有单一作家,作家会阻止所有读者完成,读者无法在作者处理过程中访问。
请注意,保持锁定的时间(无论是读取还是写入)都足够长,以防止任何并发访问,而不再是。
答案 1 :(得分:1)
是的,听起来像是你想要的ReaderWriterLockSlim。
只要读锁定到位,就不会获取写锁定。我建议您阅读文档以获取行为的完整描述(锁定队列等):
http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx