我有一个在多个生产者和多个消费者之间共享的队列资源。都是独立的进程;没有一个进程“拥有”队列。
根据实现的性质,必须控制对队列的访问,并且在任何给定时刻只能允许一个进程推送或弹出。
我认为使用名为 semaphore 的 POSIX 将是正确的解决方案,但是其中一些细节困扰着我。(顺便说一句,这是一个仅限 Linux 的实现。)
什么时候(如果有的话)我应该做一个 sem_unlink?是否有任何理由实际删除队列?
我担心在锁定队列信号量时进程会死机。有什么好办法解决这个问题吗?我可以在尝试获取锁时进行定时等待,但如果超时到期,我现在就有了竞争条件。
像这样的简单二进制锁有更好的解决方案吗?也许使用 fcntl 和/或独占打开的锁定文件?