Вот что нашёл:
<?php
if ( !function_exists('sem_get') ) {
function sem_get($key) { return fopen(__FILE__.'.sem.'.$key, 'w+'); }
function sem_acquire($sem_id) { return flock($sem_id, LOCK_EX); }
function sem_release($sem_id) { return flock($sem_id, LOCK_UN); }
}
?>
Но хотелось бы устанавливать max_acquire и сделать полноценный аналог семафора.
Полагаю, придётся записывать в файл данные счетчика, но не знаю как справиться с правильной работой ожидания.
Есть идея использовать shared memory как блокируемый файл вместо физического файла.