Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----------zad 3-------------------------------------
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ProducentKonsument
- {
- class Program
- {
- static int licznik = 0;
- static readonly int liczbaWatkow = 10;
- static readonly int liczbaIteracji = 10;
- static EventWaitHandle pisanie = new AutoResetEvent(true);
- static EventWaitHandle czytanie = new AutoResetEvent(false);
- static void Main(string[] args)
- {
- List<Thread> watkiKonsument = new List<Thread>();
- Random rand = new Random(); //random wspólny
- for (int i = 0;i<liczbaWatkow;i++)
- {
- var konsument = new Thread(() =>
- {
- // Random rand = new Random(); //random lokalny seed oparty na czasie
- //Random rand = new Random(Thread.CurrentThread.ManagedThreadId); //random lokalny seed oparty na Id wątku
- for (int j = 0; j < liczbaIteracji; j++)
- {
- var czasUspienia = rand.Next(1000);
- // Console.Write($"{czasUspienia} ");
- Thread.Sleep(czasUspienia);
- pisanie.WaitOne();
- Console.Write("{0}",czasUspienia);
- //Console.WriteLine($"[{licznik}] ");
- Console.WriteLine("[{0}] ",licznik);
- czytanie.Set();
- }
- });
- watkiKonsument.Add(konsument);
- konsument.Start();
- }
- Thread watekProducent = new Thread(() =>
- {
- Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
- try
- {
- while (true)
- {
- pisanie.Set();
- czytanie.WaitOne();
- Thread.Sleep(randPiszacy.Next(100));
- Interlocked.Increment(ref licznik);
- }
- }
- catch (ThreadInterruptedException)
- {
- Console.WriteLine("\nWątek piszący został zakończony");
- }
- });
- watekProducent.Start();
- foreach (var watek in watkiKonsument)
- {
- watek.Join();
- }
- watekProducent.Interrupt();
- watekProducent.Join();
- Console.WriteLine("To już jest koniec, naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
- ---------------------zad 4-----------------------------
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ProducentKonsument
- {
- class Program
- {
- static int licznik = 0;
- static readonly int liczbaWatkow = 10;
- static readonly int liczbaIteracji = 10;
- static EventWaitHandle pisanie = new ManualResetEvent(true);
- static EventWaitHandle czytanie = new ManualResetEvent(false);
- static Mutex mutex = new Mutex(false, "tu.kielce.pl mutex");
- static void Main(string[] args)
- {
- List<Thread> watkiKonsument = new List<Thread>();
- //Random rand = new Random(); //random wspólny
- for (int i = 0; i < liczbaWatkow; i++)
- {
- var konsument = new Thread(() =>
- {
- //Random rand = new Random(); //random lokalny seed oparty na czasie
- Random rand = new Random(Thread.CurrentThread.ManagedThreadId); //random lokalny seed oparty na Id wątku
- for (int j = 0; j < liczbaIteracji; j++)
- {
- var czasUspienia = rand.Next(1000);
- mutex.WaitOne();
- czytanie.WaitOne();
- czytanie.Reset();
- mutex.ReleaseMutex();
- pisanie.Reset();
- Console.Write($"{czasUspienia} ");
- Console.WriteLine($"[{licznik}] ");
- pisanie.Set();
- Thread.Sleep(czasUspienia);
- }
- });
- watkiKonsument.Add(konsument);
- konsument.Start();
- }
- Thread watekProducent = new Thread(() =>
- {
- Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
- try
- {
- while (true)
- {
- pisanie.WaitOne();
- pisanie.Reset();
- Interlocked.Increment(ref licznik);
- czytanie.Set();
- Thread.Sleep(randPiszacy.Next(100));
- }
- }
- catch (ThreadInterruptedException)
- {
- Console.WriteLine("\nWątek piszący został zakończony");
- }
- });
- watekProducent.Start();
- foreach (var watek in watkiKonsument)
- {
- watek.Join();
- }
- watekProducent.Interrupt();
- watekProducent.Join();
- Console.WriteLine("To już jest koniec, naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
- -------------------zad 6-----------------------------
- using System;
- using System.Collections.Generic;
- using System.Threading;
- namespace SynchroWait
- {
- class Program
- {
- static List<Thread> watki = new List<Thread>();
- static readonly int liczbaIteracji = 5;
- static readonly int liczbaWatkow = 10;
- static Random rand = new Random();
- private static readonly EventWaitHandle[] wh1 = new EventWaitHandle[liczbaWatkow];
- private static readonly EventWaitHandle[] wh2 = new EventWaitHandle[liczbaIteracji];
- static void Main(string[] args)
- {
- for (int i = 0; i < liczbaWatkow; i++)
- {
- var watek = new Thread((o) =>
- {
- int nrWatku = (int)o;
- Thread.Sleep(rand.Next(1000));
- Console.WriteLine($"Wątek nr {nrWatku} wystartował");
- for (int j = 0; j < liczbaIteracji; j++)
- {
- wh1[liczbaIteracji] = new AutoResetEvent(false);
- Console.WriteLine($"Wątek nr {nrWatku} pracuje w iteracji nr {j}");
- Thread.Sleep(rand.Next(1000));
- WaitHandle.WaitAll(wh1);
- }
- Thread.Sleep(rand.Next(1000));
- Console.WriteLine($"Wątek nr {nrWatku} zakończył działanie");
- });
- watki.Add(watek);
- watek.Start(i);
- }
- Console.WriteLine("---------------- Doczekaliśmy się -----------------");
- foreach (var w in watki)
- {
- w.Join();
- }
- Console.WriteLine("To już jest koniec, naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
- ---------------------zad 7----------------------------
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Threading;
- namespace Muteksy
- {
- class Program
- {
- static List<Thread> watki = new List<Thread>();
- static readonly int liczbaIteracji = 10000;
- static readonly int liczbaWatkow = 100;
- static int licznik = 0;
- static void Main(string[] args)
- {
- #region Bez synchronizacji
- for (int i = 0; i < liczbaWatkow; i++)
- {
- var watek = new Thread((o) =>
- {
- int nrWatku = (int)o;
- for (int j = 0; j < liczbaIteracji; j++)
- {
- licznik++;
- }
- });
- watki.Add(watek);
- watek.Start(i);
- }
- foreach (var w in watki)
- {
- w.Join();
- }
- Console.WriteLine($"Licznik: {licznik}");
- #endregion
- Console.WriteLine("To już jest koniec, naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement