В этом простом примере задача стояла так: с помощью двух потоков выводить последовательно буквы А и В, при этом
- один поток выводит только А, второй только В,
- буквы должны строго чередоваться
- первой должна быть выведена буква А
Это реализовано с помощью класса Tester, в котором запускаются два потока, синхронизированные с помощью двух соответствующих каждому потоку объектов AutoResetEvent.
Текст класса:
using System;
using System.Threading;
namespace AutoResetEvent
{
/// <summary>
/// A and B should be in ABAB order and A should be always typed first
/// </summary>
internal class Tester
{
private EventWaitHandle ev1 = new System.Threading.AutoResetEvent(false);
private EventWaitHandle ev2 = new System.Threading.AutoResetEvent(false);
private Thread thread1;
private Thread thread2;
private bool initialized = false;
private object locker = new object();
public void Start()
{
thread1 = new Thread(Worker1);
ev1.Set();
thread1.Start();
thread2 = new Thread(Worker2);
thread2.Start();
}
public void Stop()
{
thread1.Abort();
thread2.Abort();
}
private void Worker1()
{
while (true)
{
ev1.WaitOne();
Console.WriteLine("A");
ev2.Set();
}
}
private void Worker2()
{
while (true)
{
ev2.WaitOne();
Console.WriteLine("B");
ev1.Set();
}
}
}
}