Организовать доступ к элементам очереди из двух потоков - C#
Формулировка задачи:
1 поток добавляет элементы в очередь. 2 дргуих должны счиать кждый элемент очереди. Как наилучшим образом организовать считываение элементов из очереди в 2-х поток, чтобы каждый (неизвестно, какой раньше) получил элемен и он был бы удалён.
Решение задачи: «Организовать доступ к элементам очереди из двух потоков»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Queue_Test { class Program { static Queue<int> objQueue = new Queue<int>(); static object locker = new object(); static Random r = new Random(); static void Main(string[] args) { Thread addThread = new Thread(AddItems); Thread GetThread_1 = new Thread(DeueueAndDeleteItem); Thread GetThread_2 = new Thread(DeueueAndDeleteItem); addThread.Start(); GetThread_1.Start(); GetThread_2.Start(); Console.ReadLine(); } static void DeueueAndDeleteItem() { bool needTodelete = false; while (objQueue.Count!=0) { lock (locker) { int item = 0; if (needTodelete) { item = objQueue.Dequeue(); needTodelete = false; Console.WriteLine("Item {0} dequeued", item); } else { item = objQueue.Peek(); needTodelete = true; Console.WriteLine("Item {0} peeked!", item); } } Thread.Sleep(200); } } static void AddItems() { while (true) { int item = r.Next(0, 101); lock (locker) { objQueue.Enqueue(item); } Thread.Sleep(50); Console.WriteLine("Item {0} enqueued!", item); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д