Эквивалент 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);
}
Другие вопросы по тегам