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