php – sem_release():无法释放密钥0xc:无效的参数

我正在使用信号量来同步我的应用程序中的某些部分.

在释放信号量(sem_release)时,我收到了这个警告:

sem_release(): Failed to release key 0xc: Invalid argument

首先我不知道信号量是否已经释放,但由于我没有得到“真实”的结果,我猜它不会释放.

PHP版本:5.6.30

ipcs -V => ipcs来自util-linux 2.25.2

这是信号量:

key        semid      owner      perms      nsems 
0x0000000c 4124122    myUser      666        3

这是代码的一部分(类Synchronization):

...
if ( !( $this->semaphoreId = sem_get( $this->id,1 ) ) )
    throw new RuntimeException( 'Error getting Semaphore.');
...

if ( !sem_acquire( $this->semaphoreId ) )
   throw new RuntimeException( 'Error acquiring Semaphore.');
...
if ( !sem_release( $this->semaphoreId ) )
    throw new RuntimeException( 'Error releasing Semaphore.');

附:我只是在我的生产环境中遇到此错误,而且我无法在我的测试环境中重现/调试.

我在互联网上搜索了这条错误消息,但我一无所获.

有谁知道这个消息是什么意思?

编辑:

>每次运行脚本时都不会显示错误消息.
>我确实得到错误错误获取信号量’与类似的警告’sem_acquire():未能获取密钥0xc:标识符被删除’,但不是在同一时间(天)我得到’错误释放信号量’
>上面的类在不同的地方使用,以同步部分应用程序代码.我对其他键没有任何问题.是的,这个键“12”/“0xc”仅在一个地方和同一个用户使用.
>不应出现权限问题,因为如果检查信号量的权限“0xc”是“666”

你能从一开始就按照步骤进行操作:

>获取信号量资源sem_get(int $key [,int $max_acquire = 1 [,int $perm = 0666 [,int $auto_release = 1]]])

>获取信号量bool sem_acquire(resource $sem_identifier [,bool $nowait = false])

添加健全性检查以确保上述函数返回预期值.

您是否还可以检查应用程序的其他部分是否在同一用户下运行以避免权限问题.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...