Mutex
Усі потоки працюють один за одним
static Mutex mutexObj = new Mutex(); // не приймає початковий стан
static int x = 0;
static void Main(string[] args)
{
for (int i = 0; i < 3; i++)
{
Thread myThread = new Thread(Kilkist);
myThread.Name = "Thread" + i;
myThread.Start();
// не можна відправити сигнал з іншого потоку
// mutexObj.ReleaseMutex();
}
Console.ReadLine();
}
public static void Kilkist()
{
mutexObj.WaitOne();
x = 1;
for (int i = 1; i < 5; i++)
{
Console.WriteLine(Thread.CurrentThread.Name + ": " + x);
x++;
Thread.Sleep(100);
}
mutexObj.ReleaseMutex();
}
Thread0: 1
Thread0: 2
Thread0: 3
Thread0: 4
Thread1: 1
Thread1: 2
Thread1: 3
Thread1: 4
Thread2: 1
Thread2: 2
Thread2: 3
Thread2: 4
Без Mutex
Thread0: 1
Thread1: 1
Thread2: 1
Thread1: 4
Thread0: 4
Thread2: 4
Thread1: 7
Thread2: 7
Thread0: 7
Thread1: 10
Thread2: 10
Thread0: 10