Я рассматриваю пример для дальнейшей оценки моего вопроса. Рассмотрим три потока: T_1, T_2 и T_3.
- Если T_2 не может быть выполнен до тех пор, пока T_1 не закончит свой основной сегмент, тогда я просто сделаю semwait () в начале T_2 и установлю semsignal () того же семафора.
- Если T_2 не может выполняться до тех пор, пока T_1 И T_3 не закончат свой основной сегмент кода, тогда я просто заставлю T_2 ждать двух функций semsignal (), каждая в конце T_1 и T_3.
Но что, если T_2 не может выполняться, пока T_1 ИЛИ T_3 не закончили свой основной сегмент кода? Если я заставлю его ждать какую-то функцию ИЛИ, она, скорее всего, будет заблокирована в первом выражении, даже не проверяя второе, если T_1 не разрешает его запуск, а T_3 делает. Итак, мой вопрос: как я могу заставить его ждать такого состояния?