Untitled
unknown
plain_text
a month ago
2.4 kB
2
Indexable
Never
using System; using System.Threading; class Program { class TickTock { object lockOn = new object(); public void Tick(bool running) { lock (lockOn) { if (!running) { Monitor.Pulse(lockOn); // Сообщаем ожидающим потокам return; } Console.WriteLine("Tick"); Monitor.Pulse(lockOn); // Передаем управление другому потоку Monitor.Wait(lockOn); // Ждем, пока другой поток не выполнит свою часть } } public void Tock(bool running) { lock (lockOn) { if (!running) { Monitor.Pulse(lockOn); // Сообщаем ожидающим потокам return; } Console.WriteLine("Tock"); Monitor.Pulse(lockOn); // Передаем управление другому потоку Monitor.Wait(lockOn); // Ждем, пока другой поток не выполнит свою часть } } } class MyThread { public Thread Thrd; TickTock ttOb; public MyThread(string name, TickTock tt) { Thrd = new Thread(this.Run); ttOb = tt; Thrd.Name = name; Thrd.Start(); } void Run() { if (Thrd.Name == "Tick") { for (int i = 0; i < 5; i++) ttOb.Tick(true); ttOb.Tick(false); // Останавливаем "Tick" } else { for (int i = 0; i < 5; i++) ttOb.Tock(true); ttOb.Tock(false); // Останавливаем "Tock" } } } class TickingClock { static void Main() { TickTock tt = new TickTock(); MyThread mt1 = new MyThread("Tick", tt); MyThread mt2 = new MyThread("Tock", tt); mt1.Thrd.Join(); mt2.Thrd.Join(); Console.WriteLine("Clock has been stopped."); } } }
Leave a Comment