因此,PHP中的信号量非常方便地同步作业/任务(更准确地说是进程)。
假设1个进程获得了对信号量的访问权,并开始做它的事情(=工作)。其他3个进程也按一定顺序启动sem_acquire()以获得访问权限。它们都会被阻塞,等待信号量释放并分配给每个信号量。
问题是:3个单独的流程将按什么顺序执行?常见的逻辑是,它们将在"先到先得"(并被阻止)、"先服务"(发布到工作中)中执行,但我在官方文档中没有看到这种说法。
有人能确认或纠正我吗?谢谢
我写了一个脚本,演示了是的,他们是以先到先得的方式发球的。这对我的应用程序至关重要。
您也可以演示它——创建下面的thread.php,然后使用这个shell脚本调用它。
更新:信号量的维基百科明确提到了一个相关的FIFO缓冲区,以避免";饥饿";。
PHP sem_acquire()
函数调用到semop()
系统调用,这似乎不能保证等待进程将在中获取信号量的顺序。