У меня есть два процесса (пр. 1 и пр. 2).Я хочу запустить их по очереди (1, 2, 1, 2, ..., 1, 2).Я пытаюсь сделать это с помощью семафоров SYSV.Я создаю два семафора, полный и пустой (установите full = 0 и empty = 1).Чем я изменяю их, чтобы переключать процессы.Все в порядке, но есть проблема с окончанием (когда один из процессов завершает свою работу и умирает).
Я хочу, чтобы они подождали друг друга, поэтому используйте флаг SEM_UNDO в semop (не IPC_NOWAIT).Но если пр.1 умирает, SEM_UNDO возвращает все значения, которые он изменил, поэтому полные и пустые получают неправильные значения (которые зависят от того, сколько раз выполнялся pr. 1).Пара2 запутывается и не работает должным образом.
Как я могу преодолеть эту проблему?Означает ли это, что используя SEM_UNDO в каком-либо процессе, мы не должны в совокупности изменять значение семафора (в противном случае мы получим описанную проблему)?