Вопрос о значении семафора, если процесс ненормально завершает работу после уменьшения значения семафора
Если процесс снижается после уменьшения значения семафора с 1 до 0, то, насколько я понимаю, значение семафора остается равным 0.
Если тот же процесс запускается снова и пытается повторно получить тот же семафор, он будет заблокирован навсегда.
Есть ли способ сбросить значение семафора до 1 после его уменьшения, если мой процесс ненормально завершается?
1 ответ
Я предполагаю, что вы используете стандартный semctl()/semop() API для семафоров.
Имеется флаг SEM_UNDO, который сообщит ядру о необходимости сброса значения семафора, если ваш процесс завершится. Вы должны использовать это в своих вызовах semop ().
Более подробная информация здесь: http://beej.us/guide/bgipc/output/html/multipage/semaphores.html