0

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

假设 1 个进程获得了对信号量的访问权并开始做它的事情(=工作)。其他 3 个进程也在以某种顺序触发sem_acquire()以获取访问权限。它们都被阻塞,等待信号量空闲并分配给每个信号量。

问题是:这 3 个单独的进程将以什么顺序执行?常见的逻辑是他们会先来执行(并被阻止),先服务(发布到工作),但我在官方文档中没有看到这个声明。

任何人都可以确认或纠正我吗?谢谢!

4

2 回答 2

2

我写了一个脚本来演示,是的,它们是按照先到先得的方式提供的。这对我的应用程序至关重要。

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

更新:信号量的维基百科明确提到了关联的FIFO 缓冲区以避免“饥饿”。

于 2020-02-27T15:58:45.360 回答
0

PHPsem_acquire()函数调用semop()系统调用,这似乎并不能保证什么顺序等待进程将获取信号量。

于 2015-03-25T17:47:31.890 回答