Exemplo n.º 1
0
        /**
         * @throw InvalidOperationException if empty
         */
        public virtual object Dequeue()
        {
            object result = _queue.Dequeue();

            Interlocked.Decrement(ref _count);
            return(result);
        }
Exemplo n.º 2
0
        public void SimpleQueueTest()
        {
            LockFreeQueue <object> lfqo = new LockFreeQueue <object>();
            LockFreeQueue <int>    lfqi = new LockFreeQueue <int>();
            Queue  q = new Queue();
            Random r = _rand;
            //Put in a bunch of random numbers:
            int max = r.Next(2048, 4096);

            for (int i = 0; i < max; i++)
            {
                int k = r.Next();
                lfqo.Enqueue(k);
                lfqi.Enqueue(k);
                q.Enqueue(k);
            }
            //Now verify that everything is okay:
            bool success;
            int  kq;
            int  klfo;
            int  klfi;

            for (int i = 0; i < max; i++)
            {
                klfo = (int)lfqo.TryDequeue(out success);
                Assert.IsTrue(success, "Dequeue<o> success");

                klfi = lfqi.TryDequeue(out success);
                Assert.IsTrue(success, "Dequeue<i> success");

                kq = (int)q.Dequeue();
                Assert.AreEqual(kq, klfo, "LockFreeQueue<object> == Queue");
                Assert.AreEqual(kq, klfi, "LockFreeQueue<int> == Queue");
            }
            try {
                lfqi.Dequeue();
                Assert.IsTrue(false, "LockFreeQueue<int> post-Dequeue exception");
            }
            catch (InvalidOperationException) { Assert.IsTrue(true, "LockFreeQueue<int> exception"); }
            try {
                lfqo.Dequeue();
                Assert.IsTrue(false, "LockFreeQueue<object> post-Dequeue exception");
            }
            catch (InvalidOperationException) { Assert.IsTrue(true, "LockFreeQueue<int> exception"); }
        }