Синхронизация процессов с использованием семафоров - PullRequest
0 голосов
/ 24 апреля 2020

Во-первых, это мой первый пост, и я хотел бы извиниться за любые ошибки.

Я пытаюсь решить проблему с помощью семафоров для синхронизации процессов.
Есть 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. Как я могу избежать этого? Правильно ли я понял это?

Можно ли решить эту проблему с помощью подсчета семафоров? Какими должны быть начальные значения каждого семафора?

Заранее спасибо.

...