Во-первых, это мой первый пост, и я хотел бы извиниться за любые ошибки.
Я пытаюсь решить проблему с помощью семафоров для синхронизации процессов.
Есть 6 процессов, которые должны быть выполняется в следующем порядке:
Процесс 1 может запускаться первым.
Процесс 2 может запускаться после завершения процесса 1.
Процесс 3 может запускаться первым.
Процесс 4 может запускаться после процесса 2 и процесс 3 завершен.
Процесс 5 может начаться после завершения процесса 4.
Процесс 6 может начаться после завершения процесса 3.
Я пытаюсь решить эту проблему с помощью двоичных семафоров. Вот что я сделал до сих пор (псевдокод):
Process 1:
execute(process1)
signal(P2)
Process 2:
wait(P1)
execute(process2)
signal(P4)
Process 3:
execute(process3)
signal(P4)
signal(P6)
Process 4:
wait(P2)
wait(P3)
execute(process4)
signal(P5)
Process 5:
wait(P4)
execute(process5)
Process 6:
wait(P3)
execute(process6)
Я использую 6 семафоров, инициализированных в 0.
Если P1 запускается первым, он сигнализирует P2. После выполнения P2 он сигнализирует P4. Затем P3 может запустить и снова подать сигнал P4, делая его 2. Как я могу избежать этого? Правильно ли я понял это?
Можно ли решить эту проблему с помощью подсчета семафоров? Какими должны быть начальные значения каждого семафора?
Заранее спасибо.