Доброго времени суток! Я использую семафоры с целью ликцидации коллизий, которые могут возникнуть из-за одновременного доступа к БД разными процессами. Т.е. есть php-файл, в котором прописан код для работы с БД и есть множество обращений к нему. В этом файле прописан следующий код: Код (Text): function free_sem ($sem_id) { if (!sem_release($sem_id)) { //echo "sem_release(\"$sem_id\") fails!"; } if (!sem_remove($sem_id)) { //echo "sem_remove(\"$sem_id\") fails!"; } } $SEMKEY = 0x100; $sem_id = sem_get($SEMKEY, 1); if ( $sem_id === false ) { echo "sem_get() fails!"; exit; } if ( !sem_acquire($sem_id) ) { echo "sem_acquire(\"$sem_id\") fails!"; sem_remove($sem_id); exit; } // ... do stuff with DB ... free_sem($sem_id); И иногда возникает ошибка на функции sem_acquire(). При этом частота обращений ~60 раз в минуту. Время работы с БД при этом ~0-5 sec. Никто с такими траблами не сталкивался? P.S.: LAMP, Debian 5.0, PHP Version 5.2.0-8+etch13
Так же возникают warning'и при освобождении семафоров (иногда): (сейчас попробовал рядом с коментом // ... do stuff with DB поставить sleep(1); и позапускать скрипт через браузер ... однако ошибки с sem_acquire() мне таким образом не удалось ни разу добиться) Не могу понять с чем это связано. С тем, что семафор занят другим процессом, а его хотят освободить?