Advertisement
Guest User

zad7

a guest
Dec 10th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.83 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Concurrent;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9.  
  10. namespace ProducentKonsumentQ
  11. {
  12.     class Program
  13.     {
  14.         static void Main(string[] args)
  15.         {
  16.             var cq = new ConcurrentQueue<int>();
  17.             List<Thread> watki = new List<Thread>();
  18.             Random rand = new Random();
  19.             Semaphore sem = new Semaphore(0, int.MaxValue);
  20.             int added = 0;
  21.             int received = 0;
  22.             //prodcent wkłada do kolekcji 100 elementów z losowymi odstępami do 500ms
  23.             var producent = new Thread(() =>
  24.             {
  25.                 for (int l = 0; l < 100; l++)
  26.                 {
  27.                     cq.Enqueue(l);
  28.                     sem.Release();
  29.                     Console.WriteLine("Wkładam  {0}", l);
  30.                     added++;
  31.                     Thread.Sleep(rand.Next(500));
  32.                 }
  33.  
  34.             });
  35.             producent.Start();
  36.  
  37.             for (int i = 0; i < 10; i++)
  38.             {
  39.                 var watek = new Thread(() =>
  40.                 {
  41.  
  42.                     for (int l = 0; l < 10; l++)
  43.                     {
  44.                         try
  45.                         {
  46.                             int result2 = 0;
  47.  
  48.                             #region udaloSie
  49.                             //bool udalosie = cq.trydequeue(out result2);
  50.                             //while (udalosie == false)
  51.                             //{
  52.                             //    Thread.Sleep(10);
  53.                             //    udalosie = cq.trydequeue(out result2);
  54.                             //}
  55.                             //console.writeline("odbieram {0}", result2);
  56.                             //received++;
  57.                             #endregion
  58.  
  59.                             #region sem
  60.                             sem.WaitOne();
  61.                             cq.TryDequeue(out result2);
  62.                             Console.WriteLine("Odbieram {0}", result2);
  63.                             received++;
  64.                             #endregion
  65.                         }
  66.                         catch (Exception ex)
  67.                         {
  68.                             Console.WriteLine("Wyjątek przy odebraniu: ", ex.Message);
  69.                         }
  70.  
  71.                         Thread.Sleep(rand.Next(5000));
  72.                     }
  73.                 });
  74.                 watki.Add(watek);
  75.                 watek.Start();
  76.             }
  77.             foreach (var watek in watki)
  78.             {
  79.                 watek.Join();
  80.             }
  81.             producent.Join();
  82.  
  83.             Console.WriteLine("Dodanych: {0}; Odebranych: {1}", added, received);
  84.             Console.ReadLine();
  85.         }
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement