我想使用 POSIX 信号量来管理从代表队列的文件中获取和放置的原子。我想要在文件系统中命名某些东西的灵活性,以便完全不相关的进程可以共享一个队列。我认为这个计划排除了 pthreads。命名的 posix 信号量非常适合在文件系统中放置任何进程都可以看到的东西,但我找不到标准的 CondWait 原语:
... decide we have to wait ....
CondWait(sem, cond);
当进程调用 CondWait 时,它会自动发布到 sem 并等待 cond。当其他一些进程发布到 cond 时,等待进程只有在它也可以自动递减 sem 时才会唤醒。的替代品
... decide we have to wait ....
sem_post(sem);
sem_wait(cond);
sem_wait(sem);
受到竞争条件的影响,其中一些其他进程在该进程等待它之前发出 cond 信号。
我几乎没有做过任何并发编程,所以我想我会问这样:如果我对条件变量使用标准的 POSIX 计数信号量,这场比赛有可能是良性的吗?
以防万一有人想要更大的上下文,我正在为可以从 shell 脚本调用的原子队列构建 get 和 put 操作。