Я использую следующий фрагмент кода в 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. Страница man показывает, что системный вызов semop () был прерван сигналом.
Мой вопрос: можно ли безопасно проигнорировать эту ошибку и повторить попытку sem_acquire?
Редактировать : Я неправильно понял эту проблему, см. Пояснение, которое я разместил ниже.
Радж