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

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

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

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

>什么时候(如果有的话)我应该做一个sem_unlink?有没有理由真正删除队列?
>我担心在保持队列信号量被锁定的情况下进程死亡.这有什么好办法吗?我可以在尝试获取锁定时进行定时等待,但如果超时到期,我现在遇到了竞争条件.
>这样的简单二进制锁是否有更好的解决方案?也许使用fcntl和/或exclusive的lockfile打开?

解决方法:

文件锁具有在意外进程死亡时解锁的优点.我认为它们最适合你的场景.

我可以想象当我需要它们支持的更复杂的语义时使用信号量(它们不仅仅支持你想到的互斥量使用)但是如果我确实使用它们,我需要一些方法来在不合时宜的死亡中执行内务处理.我观察到Windows上的Lotus Notes有一个“ZapNotes”houskeeper,它整理了我认为类似的“不应该发生”的场景.

上一篇:可以一次多次写入PHP中的同一个文件?


下一篇:java – 多线程:为什么输出这个?这是确定性的吗?