我在php腳本中使用以下代碼片段來安全地更新共享資源。semop調用EINTR錯誤
$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?
編輯:我誤解了這個問題,請參閱我在下面發佈的說明。
拉吉