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

非线程锁定互斥

  •  0
  • BCS  · 技术社区  · 16 年前

    这是一个分支 this 但排除了一些限制。

    我有一个需要管理文件锁定的系统。我需要能够在一个线程中锁定一个文件(共享读取锁定),然后在另一个线程中解锁它。更准确地说,我不能确定它将在哪个线程中被解锁,或者即使创建线程仍然存在。

    我还需要独占的写锁定来实现这一点,但这一切都在同一个线程中。

    这个 .NET Mutex 当创建线程退出时,它不会起额外的作用。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Marc Gravell    16 年前

    可能是一个(名字) Semaphore 数到一? WaitOne 要锁定, Release 解锁?

        2
  •  1
  •   Brian ONeil    16 年前

    你链接到的问题是跨越进程边界,但从我读到的内容来看,你只是跨越线程。。。考虑到这一点,我认为Jeff Richter的ReaderWriterGate类可能很适合您的问题。它允许您控制对共享资源的访问,并将对资源的访问请求排队。它似乎没有任何线程关联,因此如果您没有跨越进程边界,它可能是您的解决方案。

    这是一篇关于这门课的文章的链接。。。 Concurrent affairs 你可以下载 PowerThreading Library from here

    如果你的情况真的很简单(除了从一个线程锁定和从另一个线程释放),我不明白为什么你不能使用内置的 ReaderWriterLock 在.NET中(尽管PowerThreading库中的那个应该要快得多)。这个 Monitor class 没有线程关联,可以从任何上下文访问,因此根据您使用它的方式,这可能是您最直接的解决方案。

        3
  •  0
  •   Stinomus    16 年前

    听起来像是 转门 问题。您需要管理第一个锁定文件的读卡器和最后一个离开解锁文件的读卡器。您可以使用信号量来实现这一点。 当有一个作家在等你的时候,你可以让旋转栅门拒绝读者,从而优先选择作者。