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

多进程同步-比信号量更好的选择?

  •  4
  • Joe  · 技术社区  · 17 年前

    我有一个在多个生产者和多个消费者之间共享的队列资源。都是独立的过程,;没有一个进程“拥有”队列。

    根据实现的性质,必须控制对队列的访问,并且在任何给定时刻只允许一个进程推送或弹出。

    我认为使用POSIX命名的信号量将是正确的解决方案,但是一些细节让我感到困扰。(顺便说一句,这是一个仅限Linux的实现。)

    1. 什么时候(如果有的话)我应该做一个扫描链接?是否有任何理由实际删除队列?

    2. 我担心的是,当保持队列信号量锁定时,进程会死机。有什么好办法吗?我可以在尝试获取锁时进行定时等待,但是如果超时过期,我现在就有了竞争条件。

    3. 对于这样一个简单的二进制锁,有更好的解决方案吗?可能会打开使用fcntl和/或独占的锁文件?

    1 回复  |  直到 12 年前
        1
  •  3
  •   djna    17 年前

    我可以想象,当我需要信号量支持的更复杂的语义时,我会使用信号量(它们不仅仅支持您心目中的互斥用法),但是如果我真的使用它们,我需要一些方法来在过早死亡的情况下执行内务管理。我注意到Windows上的LotusNotes有一个“ZapNotes”houskeeper,它在我认为类似的“不应该发生”场景中进行整理。