【问题标题】:PHP's sem_acquire() - at what order do the 'waiting' processes get executedPHP 的 sem_acquire() -“等待”进程以什么顺序执行
【发布时间】:2015-05-29 08:30:40
【问题描述】:

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

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

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

谁能确认或纠正我? 谢谢!

【问题讨论】:

    标签: php semaphore sysv-ipc


    【解决方案1】:

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

    您也可以演示它 - 创建以下 thread.php,然后使用 this shell script 调用它。

    更新:wikipedia for semaphores 明确提及关联的 FIFO 缓冲区 以避免“饥饿”。

    【讨论】:

    • 您认为您可以提供脚本吗?它可能对其他人有用。
    • 我的意思是,我可以在这里张贴一个拉链吗?或者看看这里:创建这个 php 脚本:codepile.net/pile/RnX8D7nd,然后运行这个 shell 脚本codepile.net/pile/EVe8G0xk
    • 谢谢!我认为编辑您自己的答案并为后代添加代码可能是值得的:-)。
    • 我终于想通了 :) 完成,感谢您的提示!
    【解决方案2】:

    PHP 的sem_acquire() 函数调用了semop() 系统调用,这似乎不能保证哪些订单等待进程将获取信号量。

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多