【发布时间】:2010-11-22 14:49:59
【问题描述】:
我不完全确定如何最好地完成这种多线程方案,因此任何输入都将不胜感激。
我有一个块,它读取数据,多个线程可以同时访问。我有另一个写入数据的块,任何时候只有一个线程可以写入。只要任何线程正在读取数据,它就无法开始写入。是ReaderWriterLockSlim这里走的路,会不会等读线程退出后再阻塞线程写?
【问题讨论】:
标签: c# .net multithreading locking
我不完全确定如何最好地完成这种多线程方案,因此任何输入都将不胜感激。
我有一个块,它读取数据,多个线程可以同时访问。我有另一个写入数据的块,任何时候只有一个线程可以写入。只要任何线程正在读取数据,它就无法开始写入。是ReaderWriterLockSlim这里走的路,会不会等读线程退出后再阻塞线程写?
【问题讨论】:
标签: c# .net multithreading locking
是的,ReaderWriterLockSlim 非常适合经常阅读/不经常阅读的场景。
行为如您所料 - 仅单个写入器,写入器阻塞直到所有读取器完成,写入器正在处理时读取器无法访问。
请注意,您持有锁(无论是读取还是写入)的时间足够长,以防止任何并发访问,并且不再如此。
【讨论】:
是的,听起来 ReaderWriterLockSlim 就是您想要的。
只要有读锁,就不会获得写锁。我建议您阅读文档以获取有关行为的完整描述(锁定队列等):
http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx
【讨论】: