static void PutThenPick(ConcurrFIFOQueue<int> queue) //создание функции возвращения объектов в стек { int res; for (int i = 0; i < 10000; i++) { queue.Enqueue(i); queue.Dequeue(out res); } Console.WriteLine("Our mission complete!"); }
static void DequeueWhileExists(ConcurrFIFOQueue<int> queue) //создание функции удаления объектов из стека { int res; while (true) { if (queue.Count() > 0) //проверка на длинну квина { queue.Dequeue(out res); } } }
static void Main(string[] args) { var queue = new ConcurrFIFOQueue<int>(); //Создаем потокобезопасную коллекцию for (int i = 0; i < 10000; i++) { queue.Enqueue(i); } ThreadPool.QueueUserWorkItem((o) => DequeueWhileExists(queue)); //удаление объектов из стека ThreadPool.QueueUserWorkItem((o) => DequeueWhileExists(queue)); ThreadPool.QueueUserWorkItem((o) => PutThenPick(queue)); //проверка на потокобезопасность ThreadPool.QueueUserWorkItem((o) => PutThenPick(queue)); Thread.Sleep(2000); //дожидаемся прохода Console.ReadLine(); }