我正在使用信号量来同步我的应用程序中的某些部分。
在释放信号量(sem_release)时,我收到以下警告:
sem_release(): 未能释放密钥 0xc: 无效参数
首先我不知道信号量是否释放,但由于我没有得到“真实”的结果,我猜它没有释放。
PHP版本:5.6.30
ipcs -V => 来自 util-linux 2.25.2 的 ipcs
这是信号量:
key semid owner perms nsems
0x0000000c 4124122 myUser 666 3
这是代码的一部分(同步类):
...
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.');
PS我只在我的生产环境中遇到这个错误,我无法在我的测试环境中重现/调试。
我在 Internet 上搜索此错误消息,但一无所获。
有谁知道这个消息是什么意思?
编辑:
- 每次脚本运行时都不会出现错误消息。
- 我确实有时会收到错误“获取信号量时出错”,类似警告“sem_acquire():未能获取密钥 0xc:标识符已删除”,但不是同时(一天)我得到“释放信号量时出错”
- 上面的类在各处使用不同的键来同步部分应用程序代码。我对其他键没有任何问题。是的,这个键“12”/“0xc”只在一个地方使用并且来自同一个用户。
- 不应出现权限问题,因为如果您检查信号量“0xc”的权限为“666”