我不太确定如何最好地实现这个多线程场景,所以非常感谢任何建议。
我有一个数据读取块,可以同时被多个线程访问。我还有另一个块,用于写入数据,但一次只能由一个线程写入。此外,在任何线程正在读取数据时,它不能开始写入。在这里使用ReaderWriterLockSlim
是可行的吗?它会在阻塞写线程之前等待读线程退出吗?
我不太确定如何最好地实现这个多线程场景,所以非常感谢任何建议。
我有一个数据读取块,可以同时被多个线程访问。我还有另一个块,用于写入数据,但一次只能由一个线程写入。此外,在任何线程正在读取数据时,它不能开始写入。在这里使用ReaderWriterLockSlim
是可行的吗?它会在阻塞写线程之前等待读线程退出吗?
是的,ReaderWriterLockSlim
非常适合频繁读取/不经常写入的场景。
行为与您猜测的一样-仅限单个作者,作者在所有读者完成之前阻塞,读者在作者正在处理时无法访问。
请注意,您持有锁定的时间(无论是读取还是写入)足够长,以防止任何并发访问,并且不要超过必要的时间。
是的,听起来像是您想要的ReaderWriterLockSlim。
只要存在读锁定,就不会获取写锁定。我建议您阅读完整的行为说明文档(锁定队列等):
http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx