Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 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} ");
- Console.Write("{0}", czasUspienia);
- Thread.Sleep(czasUspienia);
- //Console.WriteLine($"[{licznik}] ");
- Console.WriteLine("[{0}] ", licznik);
- }
- });
- watkiKonsument.Add(konsument);
- konsument.Start();
- }
- Thread watekProducent = new Thread(() =>
- {
- Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
- try
- {
- while (true)
- {
- 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();
- }
- }
- }
- /*Gdy wykorzystywany jest Random z seedem opartym na ID wątku lub użyty jest
- Random globalny to generowane liczby są różne w przeciwieństwie do Randoma lokalnego oparatego na seedzie.*/
- 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++)
- {
- czytanie.WaitOne();
- var czasUspienia = rand.Next(1000);
- Console.Write("czasUspienia"+ czasUspienia +("\t"));
- Thread.Sleep(czasUspienia);
- Console.WriteLine("licznik"+ licznik);
- pisanie.Set();
- }
- });
- watkiKonsument.Add(konsument);
- konsument.Start();
- }
- Thread watekProducent = new Thread(() =>
- {
- Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
- try
- {
- while (true)
- {
- pisanie.WaitOne();
- Thread.Sleep(randPiszacy.Next(100));
- Interlocked.Increment(ref licznik);
- czytanie.Set();
- }
- }
- 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();
- }
- }
- }
- /*Synchronizacja za pomocą WaitHandless powoduje brak dublowania i gubienia liczb ale cały proces trwa trochę dłużej.*/
- 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 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++)
- {
- czytanie.WaitOne();
- czytanie.Reset();
- var czasUspienia = rand.Next(1000);
- Console.Write("czasUspienia"+ czasUspienia +("\t"));
- Thread.Sleep(czasUspienia);
- Console.WriteLine("licznik"+ licznik);
- pisanie.Set();
- }
- });
- watkiKonsument.Add(konsument);
- konsument.Start();
- }
- Thread watekProducent = new Thread(() =>
- {
- Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
- try
- {
- while (true)
- {
- pisanie.WaitOne();
- pisanie.Reset();
- Thread.Sleep(randPiszacy.Next(100));
- Interlocked.Increment(ref licznik);
- czytanie.Set();
- }
- }
- 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();
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- namespace Spotkania
- {
- class Program
- {
- private static readonly EventWaitHandle wh1 = new EventWaitHandle(false, EventResetMode.AutoReset);
- private static readonly EventWaitHandle wh2 = new EventWaitHandle(false, EventResetMode.AutoReset);
- private static readonly int liczbaIteracji = 5;
- private static Random rand = new Random();
- static void Main(string[] args)
- {
- var watek1 = new Thread(() =>
- {
- for (int i = 0; i < liczbaIteracji; i++)
- {
- Thread.Sleep(rand.Next(2000));
- WaitHandle.SignalAndWait(wh1, wh2);
- Console.WriteLine("tadam wątek 1 iteracja " + i);
- }
- });
- var watek2 = new Thread(() =>
- {
- for (int i = 0; i < liczbaIteracji; i++)
- {
- Thread.Sleep(rand.Next(2000));
- WaitHandle.SignalAndWait(wh2, wh1);
- Console.WriteLine("tadam wątek 2 iteracja " + i);
- }
- });
- watek1.Start();
- watek2.Start();
- watek1.Join();
- watek2.Join();
- Console.WriteLine("To jest już koniec. Naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
- // jeden watek tworzyl 5 iteracji , po odkomentowaniu waithandle , 2 watki tworzyly po 5 iteracji
- using System;
- using System.Collections.Generic;
- using System.Threading;
- namespace SynchroWait
- {
- class Program
- {
- static EventWaitHandle abcd = new ManualResetEvent(false);
- static List<Thread> watki = new List<Thread>();
- static readonly int liczbaIteracji = 5;
- static readonly int liczbaWatkow = 10;
- static Random rand = new Random();
- 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ł");
- Console.WriteLine("Wątek nr {0} wystartował", nrWatku);
- for (int j = 0; j < liczbaIteracji; j++)
- {
- // Console.WriteLine($"Wątek nr {nrWatku} pracuje w iteracji nr {j}");
- Console.WriteLine("Wątek nr {0} pracuje w iteracji nr {1}", nrWatku, j);
- Thread.Sleep(rand.Next(1000));
- }
- Thread.Sleep(rand.Next(1000));
- //Console.WriteLine($"Wątek nr {nrWatku} zakończył działanie");
- Console.WriteLine("Wątek nr {0} zakończył działanie", nrWatku);
- abcd.Set();
- });
- watki.Add(watek);
- watek.Start(i);
- }
- abcd.WaitOne();
- Console.WriteLine("---------------- Doczekaliśmy się -----------------");
- foreach (var w in watki)
- {
- w.Join();
- }
- Console.WriteLine("To już jest koniec, naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Threading;
- namespace Muteksy
- {
- class Program
- {
- static List<Thread> watki = new List<Thread>();
- static Mutex mutex = new Mutex(false, "nazwa");
- static Semaphore semafor = new Semaphore(1,1);
- static private readonly object blok = new object();
- static readonly int liczbaIteracji = 10000;
- static readonly int liczbaWatkow = 100;
- static int licznik = 0;
- static void Main(string[] args)
- {
- for (int i = 0; i < liczbaWatkow; i++)
- {
- var watek = new Thread((o) =>
- {
- int nrWatku = (int)o;
- for (int j = 0; j < liczbaIteracji; j++)
- {
- // licznik++;
- /*lock(blok)
- {licznik++;}
- */
- /*mutex.WaitOne();
- licznik++;
- mutex.ReleaseMutex();
- */
- /*semafor.WaitOne();
- licznik++;
- semafor.Release();
- */
- }
- });
- watki.Add(watek);
- watek.Start(i);
- }
- foreach (var w in watki)
- {
- w.Join();
- }
- Console.WriteLine("Licznik: {0}", licznik);
- Console.WriteLine("To już jest koniec, naciśnij ENTER...");
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement