Esempio n. 1
0
        // добавляем и получаем
        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");
        }
Esempio n. 2
0
        // удалить все элементы
        static void DequeueWhileExists(ConcurrLIFOQueue <int> queue)
        {
            int res;

            while (true)
            {
                if (queue.Count() > 0)
                {
                    queue.TryPop(out res);
                }
            }
        }
Esempio n. 3
0
        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();
        }