Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ProducentKonsumentQ
- {
- class Program
- {
- static void Main(string[] args)
- {
- var cq = new ConcurrentQueue<int>();
- List<Thread> watki = new List<Thread>();
- Random rand = new Random();
- Semaphore sem = new Semaphore(0, int.MaxValue);
- int added = 0;
- int received = 0;
- //prodcent wkłada do kolekcji 100 elementów z losowymi odstępami do 500ms
- var producent = new Thread(() =>
- {
- for (int l = 0; l < 100; l++)
- {
- cq.Enqueue(l);
- sem.Release();
- Console.WriteLine("Wkładam {0}", l);
- added++;
- Thread.Sleep(rand.Next(500));
- }
- });
- producent.Start();
- for (int i = 0; i < 10; i++)
- {
- var watek = new Thread(() =>
- {
- for (int l = 0; l < 10; l++)
- {
- try
- {
- int result2 = 0;
- #region udaloSie
- //bool udalosie = cq.trydequeue(out result2);
- //while (udalosie == false)
- //{
- // Thread.Sleep(10);
- // udalosie = cq.trydequeue(out result2);
- //}
- //console.writeline("odbieram {0}", result2);
- //received++;
- #endregion
- #region sem
- sem.WaitOne();
- cq.TryDequeue(out result2);
- Console.WriteLine("Odbieram {0}", result2);
- received++;
- #endregion
- }
- catch (Exception ex)
- {
- Console.WriteLine("Wyjątek przy odebraniu: ", ex.Message);
- }
- Thread.Sleep(rand.Next(5000));
- }
- });
- watki.Add(watek);
- watek.Start();
- }
- foreach (var watek in watki)
- {
- watek.Join();
- }
- producent.Join();
- Console.WriteLine("Dodanych: {0}; Odebranych: {1}", added, received);
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement