PHP';s sem_acquire()-按照什么顺序执行';正在等待';进程被执行


PHP's sem_acquire() - at what order do the 'waiting' processes get executed

因此,PHP中的信号量非常方便地同步作业/任务(更准确地说是进程)。

假设1个进程获得了对信号量的访问权,并开始做它的事情(=工作)。其他3个进程也按一定顺序启动sem_acquire()以获得访问权限。它们都会被阻塞,等待信号量释放并分配给每个信号量。

问题是:3个单独的流程将按什么顺序执行?常见的逻辑是,它们将在"先到先得"(并被阻止)、"先服务"(发布到工作中)中执行,但我在官方文档中没有看到这种说法。

有人能确认或纠正我吗?谢谢

我写了一个脚本,演示了是的,他们是以先到先得的方式发球的。这对我的应用程序至关重要。

您也可以演示它——创建下面的thread.php,然后使用这个shell脚本调用它。

更新:信号量的维基百科明确提到了一个相关的FIFO缓冲区,以避免";饥饿";。

PHP sem_acquire()函数调用到semop()系统调用,这似乎不能保证等待进程将在中获取信号量的顺序。