using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace ConsoleApp1 { static class Program { private static Mutex mut = new Mutex(); private static int[] tab = new int[20]; static void Main(string[] args) { Thread dotab11 = new Thread(dotab1); Thread dotab22 = new Thread(dotab2); Thread wyswietll = new Thread(wyswietl); dotab11.Start(); dotab22.Start(); dotab11.Join(); dotab22.Join(); wyswietll.Start(); Console.ReadLine(); } static void dotab1() { for (int i = 0; i < 20; i++) { Console.WriteLine("dotab1 wszedl do sekcji krytycznej po raz {0}", i); mut.WaitOne(); Thread.Sleep(330); tab[i] = 1; mut.ReleaseMutex(); Thread.Sleep(60); } } static void dotab2() { for (int i = 0; i < 20; i++) { if (mut.WaitOne(300)) { Console.WriteLine("dotab2 wszedl do sekcji krytycznej po raz {0}", i); Thread.Sleep(50); tab[i] = 2; mut.ReleaseMutex(); } else { Console.WriteLine("dotab2 nie wszedlem do sekcji krytycznej"); } Thread.Sleep(40); } } static void wyswietl() { //Thread.Sleep(10000); mut.WaitOne(); for (int i = 0; i < 20; i++) { Console.WriteLine("{0}", tab[i]); } mut.ReleaseMutex(); } } }