codegeekalpha Ответов: 1

Концепция сигнала и ожидания в многопоточности


Я пытаюсь понять концепции параллелизма в этой программе. Я пытаюсь понять это, но я не в состоянии понять основную логику. Я не уверен, что сигнал и ждать на самом деле они здесь делают.

основная логика здесь
export operation Hi
			if ! flip then
				stdout.putstring["Waiting Hi\n"]
				wait c
			end if
			stdout.putstring["Hi\n"]
			flip <- false
			signal c
		end hi
		export operation Ho
			if flip then
				stdout.putstring["Waiting Ho\n"]
				wait c
			end if
			stdout.putstring["Ho\n"]
			flip <- true
			signal c
		end ho


Что я уже пробовал:

Выход таков
Hi
Waiting Hi
Ho
Hi
Ho
Hi
Ho
Hi
Ho
Hi
Ho
Hi
Ho
Waiting Ho
Hi
Ho
Hi
Ho
Hi
Ho
Hi
Ho


Может ли кто-нибудь объяснить, как генерируется этот вывод, как сигнал и ожидание выполняют вывод

Jochen Arndt

Это похоже на изумруд.
Я думаю, что здесь не так много (если вообще есть) знающих этот язык (я не знаю).

В качестве первого шага я предлагаю поискать документацию для функций ожидания и сигнала.

[no name]

Я тоже не могу вам сказать, что это такое. Никогда раньше не видел. Я могу сказать, что это так нет С.

Albert Holguin

Это определенно не С. Если вам нужна помощь с каким бы то ни было языком, отметьте его соответствующим образом. Если вам просто нужна помощь в понимании параллелизма в целом,не используйте языковой тег.

1 Ответов

Рейтинг:
5

Richard MacCutchan

Понятия не имею, что это за язык, но это не Си. Мне кажется, что есть два независимых вида деятельности, hi и ho Каждый тестирует флаг и либо ждет, либо продолжает обработку. Ожидающее действие ничего не делает, пока другое действие не посылает сигнал, который перезапускает его. Затем они продолжают движение по противоположным путям. На выходе отображается порядок выполнения,