Вопрос о значении семафора, если процесс ненормально завершает работу после уменьшения значения семафора

Если процесс снижается после уменьшения значения семафора с 1 до 0, то, насколько я понимаю, значение семафора остается равным 0.

Если тот же процесс запускается снова и пытается повторно получить тот же семафор, он будет заблокирован навсегда.

Есть ли способ сбросить значение семафора до 1 после его уменьшения, если мой процесс ненормально завершается?

1 ответ

Я предполагаю, что вы используете стандартный semctl()/semop() API для семафоров.

Имеется флаг SEM_UNDO, который сообщит ядру о необходимости сброса значения семафора, если ваш процесс завершится. Вы должны использовать это в своих вызовах semop ().

Более подробная информация здесь: http://beej.us/guide/bgipc/output/html/multipage/semaphores.html

Другие вопросы по тегам