代码之家  ›  专栏  ›  技术社区  ›  Homde

读/写锁定混乱

  •  5
  • Homde  · 技术社区  · 15 年前

    我不完全确定如何最好地完成这个多线程场景,所以任何输入都会受到赞赏。

    我有一个读数据的块,几个线程可以一次访问它。我有另一个写数据的块,任何时候只有一个线程可以写。而且,只要有线程读取数据,它就不能开始写入。是 ReaderWriterLockSlim 这里的方法是,在阻塞线程进行写入之前,它会等待读取线程退出吗?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Steve Townsend    15 年前

    对, ReaderWriterLockSlim 非常适合频繁读写的场景。

    正如您所猜测的,这种行为仅限于单个写入程序,写入程序在完成所有读取程序之前都会阻塞,而写入程序正在运行时,读取程序无法访问。

    请注意,您持有锁的时间(无论是读还是写)足够长,以防止任何并发访问,并且不再。

        2
  •  1
  •   Ohad Schneider    15 年前

    是的,听上去读写器的锁定是你想要的。

    只要读锁到位,就不会获取写锁。我建议您阅读文档以获得行为的完整描述(锁定队列等):

    http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx