Эквивалент Sys V SEM_UNDO для семафоров posix
В системе Linux с несколькими процессами семафоры системы V допускают опцию SEM_UNDO, предотвращающую застревание семафора в случае сбоя процесса, содержащего семафор. Каков правильный метод предотвращения заедания семафоров POSIX в результате сбоя в процессе, удерживающем семафор? Или POSIX гарантирует, что семафор освобождается в случае сбоя?
1 ответ
Вы можете использовать обработчик сигнала для SIGSEGV, а затем разблокировать и удалить обработчик сигнала.
// set handler
signal(SIGSEGV, handler);
void handler(int signum) {
// unlock the locked semaphores
signal(SIGSEGV, SIG_DFL);
}