// добавляем и получаем static void PutThenPick(ConcurrLIFOQueue <int> queue) { int res; for (int i = 0; i < 10000; i++) { queue.Push(i); queue.TryPop(out res); } Console.WriteLine("done"); }
static void Main(string[] args) { var queue = new ConcurrLIFOQueue <int>(); for (int i = 0; i < 10000; i++) { queue.Push(i); } ThreadPool.QueueUserWorkItem((o) => DequeueWhileExists(queue)); //добавляем метод DequeueWhileExists в очередь на выполнение. Метод выполнится когда поток из пула потоков станет доступным ThreadPool.QueueUserWorkItem((o) => DequeueWhileExists(queue)); ThreadPool.QueueUserWorkItem((o) => PutThenPick(queue)); ThreadPool.QueueUserWorkItem((o) => PutThenPick(queue)); Thread.Sleep(2000); Console.ReadLine(); }