2

MakeWater() synchronization pseudocodeсемафоры makeWater() синхронизации

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

ответ

4

Таким образом, вам необходимо сделать комбинации H2O (2Hs и один O) из числа одновременно работающих H-нитей и O-нитей.

Вещь одна «O» нуждается в двух «H». И нет разделения между двумя разными молекулами воды.

Итак, предположим, что количество потоков O и H начинает их процессы.

  • Нет нитки O могут выходить за пределы P(o_wait), потому что o-wait заблокирован и должен ждать.
  • Один случайный случайный H-поток (скажем, H * -1) может пройти мимо P(mutex) (теперь mutex = 0 и count = 1), и он войдет внутрь if(count%2 == 1), затем пересчет «mutex» (теперь mutex = 1) и блок в P(h_wait). (Этот счет фактически относится к числу H)
  • Поскольку «мьютекс» был подсчитан, другая случайная H-нить (H * -2) начнет проходить мимо P(mutex) (Теперь mutex = 0 и count = 2). Но теперь число равно -> следовательно, оно идет внутри else. Затем он будет V(o_wait) (теперь o_wait = 1) и застрял в P(h_wait).
  • Теперь H * -1 все еще находится на прежней позиции внутри if блок. Но поскольку o_wait подсчитывается до 1, удачный поток O (O *) может продолжить свой процесс. Он будет делать два V(h_wait) s (теперь o_wait = 0, h_wait = 2), так что могут продолжаться 2 предыдущих H-потока (нет других, теперь h_wait = 0). Таким образом, все 3 (2 Hs и O) могут завершить свой процесс, а H * -2 - подсчет «мьютекса» (теперь mutex = 1).
  • Теперь окончательные значения глобальных переменных после завершения одной молекулы, mutex = 1, h_wait = 0 и o_wait = 0, поэтому точно начальный статус. Теперь предыдущий процесс будет происходить снова и снова, поэтому будут созданы молекулы H2O.

Считаю, что вы поняли это. Пожалуйста, задавайте вопросы, если они есть. :))

+0

Это отличное объяснение =) Я понял очень хорошо! Большое спасибо Supun @Supun Wijerathne – Blu

+0

@Blu всегда приятно видеть (Y) :)) –

Смежные вопросы