flock()
- это функция блокировки сообщений с помощью портативного. Они явно рекламируют, что он даже работает под окнами:
flock() позволяет вам выполнить простую модель чтения/записи, которая может использоваться практически на каждой платформе (включая большинство производных Unix и даже Windows).
Я хотел бы добавить также переносимый тайм-аут блокировки flock()
(и ожидание ожидания не работает с опцией LOCK_NB
). В UNIX это может быть достигнуто с установкой сигнала тревоги, который отправит SIGALRM
:
pcntl_signal(SIGALRM, function() {});
pcntl_alarm(3);
try {
if (!flock($handle, LOCK_EX)) {
throw new \Exception("Timeout");
}
} finally {
pcntl_alarm(0);
pcntl_signal_dispatch();
pcntl_signal(SIGALRM, SIG_DFL);
}
Есть ли способ переносить таймаут на блокировку flock()
? Если да, то как?