Хм ... ограничено тремя потоками и только двоичными семафорами, я хотел бы попробовать это, используя три семафора, A, B, C. A контролирует доступ к счетчику process_arrived, B и C для первого и второготемы ждать.A устанавливается в 1, B & C - в 0. Поток 1 получает A, поэтому вход 2 и 3 запрещен.Переключение на process_arrived заставляет поток 1 включить inc process_arrived, освободить A и ждать на B. Поток 2 получает A, а переключатель вызывает его на inc process_arrived, переключиться и так освободить A и ждать на C. Поток 3 получает A, а переключатель вызываетдля передачи сигнала B, сигнала C, установите для параметра process_arrived значение 0, для сигнала A и продолжения работы.
Потоки 1 и 2 не могут проходить через B и C до тех пор, пока 3 не подаст сигнал.Когда B / C сигнализируется 3, 1/2 может бежать, но не может вернуться в цикл и попасть в барьер, пока 3 не отпустит A, и в этот момент барьер находится в правильном состоянии, чтобы снова действовать в качестве барьера - A имеет счетчик1, B и C имеют ноль, а process_arrived равен нулю.