Untitled
unknown
plain_text
a year ago
2.4 kB
13
Indexable
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.");
}
}
}
Editor is loading...
Leave a Comment