Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpCcCnd 365 of 509 menu
◀ ▶

Ожидание условия Monitor Wait в C#

Метод Monitor.Wait освобождает монитор и ждёт Pulse; условие проверяют в цикле while.

Поток могут разбудить без реального сигнала. Поэтому флаг проверяют в цикле снова, а не один раз после пробуждения.

Строка "go" появится только после сигнала. Ждущий поток не выйдет из цикла, пока ready равен false, даже если его разбудили зря:

object gate = new(); bool ready = false; Thread waiter = new(() => { lock (gate) { while (!ready) Monitor.Wait(gate); Console.WriteLine("go"); // выведет go } }); waiter.Start(); lock (gate) { ready = true; Monitor.Pulse(gate); } waiter.Join();

Заставьте один поток ждать, пока общее поле не станет строкой "open". Во втором потоке запишите эту строку и разбудите ждущего. После пробуждения выведите поле в консоль.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить