семафоры makeWater() синхронизации
Эта программа требует, чтобы решить makeWater() проблемы синхронизации. Однако я не мог понять, как это сделать. Я новичок в семафорах. Я бы посоветовал, если вы поможете мне понять этот код.
семафоры makeWater() синхронизации
Эта программа требует, чтобы решить makeWater() проблемы синхронизации. Однако я не мог понять, как это сделать. Я новичок в семафорах. Я бы посоветовал, если вы поможете мне понять этот код.
Таким образом, вам необходимо сделать комбинации H2O (2Hs и один O) из числа одновременно работающих H-нитей и O-нитей.
Вещь одна «O» нуждается в двух «H». И нет разделения между двумя разными молекулами воды.
Итак, предположим, что количество потоков O и H начинает их процессы.
P(o_wait)
, потому что o-wait заблокирован и должен ждать.P(mutex)
(теперь mutex = 0 и count = 1), и он войдет внутрь if(count%2 == 1)
, затем пересчет «mutex» (теперь mutex = 1) и блок в P(h_wait)
. (Этот счет фактически относится к числу H)P(mutex)
(Теперь mutex = 0 и count = 2). Но теперь число равно -> следовательно, оно идет внутри else
. Затем он будет V(o_wait)
(теперь o_wait = 1) и застрял в P(h_wait)
.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).Считаю, что вы поняли это. Пожалуйста, задавайте вопросы, если они есть. :))
Это отличное объяснение =) Я понял очень хорошо! Большое спасибо Supun @Supun Wijerathne – Blu
@Blu всегда приятно видеть (Y) :)) –