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