我在 php 脚本中使用以下代码片段来安全地更新共享资源。
$lock_id = sem_get( ftok( 'tmp/this.lock', 'r'));
sem_acquire($lock_id)
//do something
sem_release($lock_id)
当我用大量请求对这段代码进行压力测试时,我得到一个错误:
Warning: semop() failed acquiring SYSVSEM_SETVAL for key 0x1e: No space left on device in blahblah.php on line 1293
php 源代码显示以下获取 SYSVSEM_SETVAL 失败的代码
while (semop(semid, sop, 3) == -1) {
if (errno != EINTR) {
php3_error(E_WARNING, "semop() failed acquiring SYSVSEM_SETVAL for key 0x%x: %s", key, strerror(errno));
break;
}
}
这意味着 semop 因 EINTR 而失败。手册页显示 semop() 系统调用被信号中断。
我的问题是我可以安全地忽略此错误并重试 sem_acquire 吗?
编辑:我误解了这个问题,请参阅我在下面发布的说明。
拉吉