public void Wyw1() { ThreadExample E1 = new ThreadExample(); E1.Wyw(); }
static void Main(string[] args) { ThreadExample thread = new ThreadExample(); thread.Zad1(); thread.Zad2(); //Zad 3 new Thread(thread.Run).Start(); thread.Run(); //'*'zostaje wypisana 5 razy ponieważ, zmienna done zostaje zmieniona na true przez jeden z wątków, zatem drugi wątek nie wchodzi do if //Zad 4 new Thread(thread.Run2).Start(); thread.Run2(); //wątki współdzielą składową statyczną (wyświetlany x 5 razy) new Thread(thread.Run3).Start(); thread.Run3(); //w wyniku zmiany funkcji Run2 na Run3 (wyświetlany x 10 razy) //Spowodowane jest to tym, że jeden wątek może sprawdzać wartość wyrażenia if, podczas gdy drugi nie zdążył jeszcze zmienić done na true //Zad 5 new Thread(thread.RunLocker).Start(); thread.RunLocker(); //Zastosowanie lock gwarantuje, że w danej chwili tylko jeden wątek może nałożyć blokade, a drugi oczekuje na zniesienie blokady //Zad 6 thread.Zad6(); //Join powoduje wstrzymanie pracy kolejnego wątku do czasu gdy ten pierwszy nie zakończy działania //Zad 7 List <List <int> > m1 = new List <List <int> >() { new List <int>() { 1, 1 }, new List <int>() { 1, 1 } }; List <List <int> > m2 = new List <List <int> >() { new List <int>() { 2, 2 }, new List <int>() { 2, 2 } }; List <List <int> > m3 = new List <List <int> >() { new List <int>() { 3, 3 }, new List <int>() { 3, 3 } }; List <List <int> > m4 = new List <List <int> >() { new List <int>() { 4, 4 }, new List <int>() { 4, 4 } }; List <List <int> > m5 = new List <List <int> >() { new List <int>() { 5, 5 }, new List <int>() { 5, 5 } }; thread.Zad7(m1, m2, m3, m4, m5); }