Exemplo n.º 1
0
        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!");
        }
Exemplo n.º 2
0
        static void DequeueWhileExists(ConcurrFIFOQueue<int> queue)     //создание функции удаления объектов из стека
        {
            int res;

            while (true)
            {
                if (queue.Count() > 0)      //проверка на длинну квина
                {
                    queue.Dequeue(out res);
                }
            }
        }
Exemplo n.º 3
0
        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();
        }