Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.23 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ProducentKonsument
  9. {
  10.     class Program
  11.     {
  12.  
  13.         static int licznik = 0;
  14.         static readonly int liczbaWatkow = 10;
  15.         static readonly int liczbaIteracji = 10;
  16.  
  17.  
  18.         static void Main(string[] args)
  19.         {
  20.             List<Thread> watkiKonsument = new List<Thread>();
  21.             //Random rand = new Random(); //random wspólny
  22.             for (int i = 0; i < liczbaWatkow; i++)
  23.             {
  24.                 var konsument = new Thread(() =>
  25.                 {
  26.                     Random rand = new Random(); //random lokalny seed oparty na czasie
  27.                     //Random rand = new Random(Thread.CurrentThread.ManagedThreadId); //random lokalny seed oparty na Id wątku
  28.  
  29.                     for (int j = 0; j < liczbaIteracji; j++)
  30.                     {
  31.                         var czasUspienia = rand.Next(1000);
  32.                         // Console.Write($"{czasUspienia} ");
  33.                         Console.Write("{0}", czasUspienia);
  34.                         Thread.Sleep(czasUspienia);
  35.                         //Console.WriteLine($"[{licznik}] ");
  36.                         Console.WriteLine("[{0}] ", licznik);
  37.                     }
  38.                 });
  39.                 watkiKonsument.Add(konsument);
  40.                 konsument.Start();
  41.             }
  42.  
  43.             Thread watekProducent = new Thread(() =>
  44.             {
  45.                 Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
  46.                 try
  47.                 {
  48.                     while (true)
  49.                     {
  50.                         Thread.Sleep(randPiszacy.Next(100));
  51.                         Interlocked.Increment(ref licznik);
  52.                     }
  53.                 }
  54.                 catch (ThreadInterruptedException)
  55.                 {
  56.                     Console.WriteLine("\nWątek piszący został zakończony");
  57.                 }
  58.             });
  59.  
  60.             watekProducent.Start();
  61.  
  62.             foreach (var watek in watkiKonsument)
  63.             {
  64.                 watek.Join();
  65.             }
  66.  
  67.             watekProducent.Interrupt();
  68.             watekProducent.Join();
  69.  
  70.             Console.WriteLine("To już jest koniec, naciśnij ENTER...");
  71.             Console.ReadLine();
  72.         }
  73.     }
  74. }
  75.  
  76.  
  77. /*Gdy wykorzystywany jest Random z seedem opartym na ID wątku lub użyty jest
  78. Random globalny to generowane liczby są różne w przeciwieństwie do Randoma lokalnego oparatego na  seedzie.*/
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85. using System;
  86. using System.Collections.Generic;
  87. using System.Linq;
  88. using System.Text;
  89. using System.Threading;
  90. using System.Threading.Tasks;
  91.  
  92. namespace ProducentKonsument
  93. {
  94.     class Program
  95.     {
  96.  
  97.         static int licznik = 0;
  98.         static readonly int liczbaWatkow = 10;
  99.         static readonly int liczbaIteracji = 10;
  100.         static EventWaitHandle pisanie = new AutoResetEvent(true);
  101.         static EventWaitHandle czytanie = new AutoResetEvent(false);
  102.  
  103.  
  104.         static void Main(string[] args)
  105.         {
  106.             List<Thread> watkiKonsument = new List<Thread>();
  107.             Random rand = new Random(); //random wspólny
  108.            
  109.  
  110.  
  111.             for (int i = 0; i < liczbaWatkow; i++)
  112.             {
  113.                 var konsument = new Thread(() =>
  114.                 {
  115.                     // Random rand = new Random(); //random lokalny seed oparty na czasie
  116.                     // Random rand = new Random(Thread.CurrentThread.ManagedThreadId); //random lokalny seed oparty na Id wątku
  117.  
  118.                     for (int j = 0; j < liczbaIteracji; j++)
  119.                     {
  120.                         czytanie.WaitOne();
  121.                         var czasUspienia = rand.Next(1000);
  122.                         Console.Write("czasUspienia"+ czasUspienia +("\t"));
  123.                         Thread.Sleep(czasUspienia);
  124.                         Console.WriteLine("licznik"+ licznik);
  125.                         pisanie.Set();
  126.                     }
  127.                 });
  128.                 watkiKonsument.Add(konsument);
  129.                 konsument.Start();
  130.             }
  131.  
  132.             Thread watekProducent = new Thread(() =>
  133.             {
  134.                 Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
  135.                
  136.                 try
  137.                 {
  138.                     while (true)
  139.                     {
  140.                         pisanie.WaitOne();
  141.                         Thread.Sleep(randPiszacy.Next(100));
  142.                         Interlocked.Increment(ref licznik);
  143.                         czytanie.Set();
  144.                     }
  145.                 }
  146.                 catch (ThreadInterruptedException)
  147.                 {
  148.                     Console.WriteLine("\nWątek piszący został zakończony");
  149.                 }
  150.             });
  151.  
  152.             watekProducent.Start();
  153.  
  154.             foreach (var watek in watkiKonsument)
  155.             {
  156.                 watek.Join();
  157.             }
  158.  
  159.             watekProducent.Interrupt();
  160.             watekProducent.Join();
  161.  
  162.             Console.WriteLine("To już jest koniec, naciśnij ENTER...");
  163.             Console.ReadLine();
  164.         }
  165.     }
  166. }
  167. /*Synchronizacja za pomocą WaitHandless powoduje brak dublowania i gubienia liczb ale cały proces trwa trochę dłużej.*/
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175. using System;
  176. using System.Collections.Generic;
  177. using System.Linq;
  178. using System.Text;
  179. using System.Threading;
  180. using System.Threading.Tasks;
  181.  
  182. namespace ProducentKonsument
  183. {
  184.     class Program
  185.     {
  186.  
  187.         static int licznik = 0;
  188.         static readonly int liczbaWatkow = 10;
  189.         static readonly int liczbaIteracji = 10;
  190.         static EventWaitHandle pisanie = new ManualResetEvent (true);
  191.         static EventWaitHandle czytanie = new ManualResetEvent (false);
  192.  
  193.  
  194.         static void Main(string[] args)
  195.         {
  196.             List<Thread> watkiKonsument = new List<Thread>();
  197.             Random rand = new Random(); //random wspólny
  198.            
  199.  
  200.  
  201.             for (int i = 0; i < liczbaWatkow; i++)
  202.             {
  203.                 var konsument = new Thread(() =>
  204.                 {
  205.                     // Random rand = new Random(); //random lokalny seed oparty na czasie
  206.                     // Random rand = new Random(Thread.CurrentThread.ManagedThreadId); //random lokalny seed oparty na Id wątku
  207.  
  208.                     for (int j = 0; j < liczbaIteracji; j++)
  209.                     {
  210.                         czytanie.WaitOne();
  211.            czytanie.Reset();
  212.                         var czasUspienia = rand.Next(1000);
  213.                         Console.Write("czasUspienia"+ czasUspienia +("\t"));
  214.                         Thread.Sleep(czasUspienia);
  215.                         Console.WriteLine("licznik"+ licznik);
  216.                         pisanie.Set();
  217.                     }
  218.                 });
  219.                 watkiKonsument.Add(konsument);
  220.                 konsument.Start();
  221.             }
  222.  
  223.             Thread watekProducent = new Thread(() =>
  224.             {
  225.                 Random randPiszacy = new Random(Thread.CurrentThread.ManagedThreadId);
  226.                
  227.                 try
  228.                 {
  229.                     while (true)
  230.                     {
  231.                         pisanie.WaitOne();
  232.                           pisanie.Reset();
  233.                         Thread.Sleep(randPiszacy.Next(100));
  234.                         Interlocked.Increment(ref licznik);
  235.                         czytanie.Set();
  236.                     }
  237.                 }
  238.                 catch (ThreadInterruptedException)
  239.                 {
  240.                     Console.WriteLine("\nWątek piszący został zakończony");
  241.                 }
  242.             });
  243.  
  244.             watekProducent.Start();
  245.  
  246.             foreach (var watek in watkiKonsument)
  247.             {
  248.                 watek.Join();
  249.             }
  250.  
  251.             watekProducent.Interrupt();
  252.             watekProducent.Join();
  253.  
  254.             Console.WriteLine("To już jest koniec, naciśnij ENTER...");
  255.             Console.ReadLine();
  256.         }
  257.     }
  258. }
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. using System;
  269. using System.Collections.Generic;
  270. using System.Linq;
  271. using System.Text;
  272. using System.Threading.Tasks;
  273. using System.Threading;
  274.  
  275. namespace Spotkania
  276. {
  277.     class Program
  278.     {
  279.         private static readonly EventWaitHandle wh1 = new EventWaitHandle(false, EventResetMode.AutoReset);
  280.         private static readonly EventWaitHandle wh2 = new EventWaitHandle(false, EventResetMode.AutoReset);
  281.         private static readonly int liczbaIteracji = 5;
  282.         private static Random rand = new Random();
  283.  
  284.         static void Main(string[] args)
  285.         {
  286.             var watek1 = new Thread(() =>
  287.             {
  288.                 for (int i = 0; i < liczbaIteracji; i++)
  289.                 {
  290.                     Thread.Sleep(rand.Next(2000));
  291.                     WaitHandle.SignalAndWait(wh1, wh2);
  292.                     Console.WriteLine("tadam wątek 1 iteracja " + i);
  293.                 }
  294.             });
  295.             var watek2 = new Thread(() =>
  296.             {
  297.                 for (int i = 0; i < liczbaIteracji; i++)
  298.                 {
  299.                     Thread.Sleep(rand.Next(2000));
  300.                      WaitHandle.SignalAndWait(wh2, wh1);
  301.                     Console.WriteLine("tadam wątek 2 iteracja " + i);
  302.                 }
  303.             });
  304.             watek1.Start();
  305.             watek2.Start();
  306.             watek1.Join();
  307.             watek2.Join();
  308.             Console.WriteLine("To jest już koniec. Naciśnij ENTER...");
  309.             Console.ReadLine();
  310.         }
  311.     }
  312. }
  313.  
  314. // jeden watek tworzyl 5 iteracji , po odkomentowaniu waithandle , 2 watki tworzyly  po 5 iteracji
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323. using System;
  324. using System.Collections.Generic;
  325. using System.Threading;
  326.  
  327. namespace SynchroWait
  328. {
  329.     class Program
  330.     {
  331.         static EventWaitHandle abcd = new ManualResetEvent(false);
  332.         static List<Thread> watki = new List<Thread>();
  333.         static readonly int liczbaIteracji = 5;
  334.         static readonly int liczbaWatkow = 10;
  335.         static Random rand = new Random();
  336.  
  337.         static void Main(string[] args)
  338.         {
  339.             for (int i = 0; i < liczbaWatkow; i++)
  340.             {
  341.                 var watek = new Thread((o) =>
  342.                 {
  343.                     int nrWatku = (int)o;
  344.                     Thread.Sleep(rand.Next(1000));
  345.                     //Console.WriteLine($"Wątek nr {nrWatku} wystartował");
  346.                     Console.WriteLine("Wątek nr {0} wystartował", nrWatku);
  347.                     for (int j = 0; j < liczbaIteracji; j++)
  348.                     {
  349.  
  350.                         // Console.WriteLine($"Wątek nr {nrWatku} pracuje w iteracji nr {j}");
  351.                         Console.WriteLine("Wątek nr {0} pracuje w iteracji nr {1}", nrWatku, j);
  352.                         Thread.Sleep(rand.Next(1000));
  353.                     }
  354.                     Thread.Sleep(rand.Next(1000));
  355.                     //Console.WriteLine($"Wątek nr {nrWatku} zakończył działanie");                    
  356.                     Console.WriteLine("Wątek nr {0} zakończył działanie", nrWatku);
  357.                     abcd.Set();
  358.                 });
  359.  
  360.                 watki.Add(watek);
  361.                 watek.Start(i);
  362.             }
  363.  
  364.             abcd.WaitOne();
  365.             Console.WriteLine("---------------- Doczekaliśmy się -----------------");
  366.  
  367.             foreach (var w in watki)
  368.             {
  369.                 w.Join();
  370.             }
  371.  
  372.             Console.WriteLine("To już jest koniec, naciśnij ENTER...");
  373.             Console.ReadLine();
  374.         }
  375.     }
  376. }
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386. using System;
  387. using System.Collections.Generic;
  388. using System.Threading;
  389.  
  390. namespace Muteksy
  391. {
  392.     class Program
  393.     {
  394.         static List<Thread> watki = new List<Thread>();
  395.         static Mutex mutex = new Mutex(false, "nazwa");
  396.         static Semaphore semafor = new Semaphore(1,1);
  397.         static private readonly object blok = new object();
  398.  
  399.         static readonly int liczbaIteracji = 10000;
  400.         static readonly int liczbaWatkow = 100;
  401.  
  402.         static int licznik = 0;
  403.  
  404.         static void Main(string[] args)
  405.         {
  406.  
  407.             for (int i = 0; i < liczbaWatkow; i++)
  408.             {
  409.                 var watek = new Thread((o) =>
  410.                 {
  411.                     int nrWatku = (int)o;
  412.  
  413.                     for (int j = 0; j < liczbaIteracji; j++)
  414.                     {
  415.                        // licznik++;
  416.  
  417.                         /*lock(blok)
  418.                           {licznik++;}
  419.                          */
  420.                         /*mutex.WaitOne();
  421.                           licznik++;
  422.                           mutex.ReleaseMutex();
  423.                          */
  424.                         /*semafor.WaitOne();
  425.                          licznik++;
  426.                          semafor.Release();
  427.                         */
  428.                     }
  429.  
  430.                 });
  431.                 watki.Add(watek);
  432.                 watek.Start(i);
  433.             }
  434.  
  435.  
  436.             foreach (var w in watki)
  437.             {
  438.                 w.Join();
  439.             }
  440.             Console.WriteLine("Licznik: {0}", licznik);
  441.             Console.WriteLine("To już jest koniec, naciśnij ENTER...");
  442.             Console.ReadLine();
  443.         }
  444.     }
  445. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement