Exemplo n.º 1
0
        public void CloseBehviour()
        {
            var queue = new SharedQueue();

            queue.Enqueue("Hello World");
            //queue.Close();

            var item = queue.Dequeue().ToString();
            Console.Out.WriteLine("item = {0}", item);

            ThreadPool.QueueUserWorkItem(state =>
            {
                // expect the queue to block here
                Console.WriteLine("Dequeue in thread");
                try
                {
                    var item2 = queue.Dequeue().ToString();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception in thread\n{0}", e.ToString());
                }
            });

            Thread.Sleep(100);
            Console.WriteLine("Closing queue");
            queue.Close();

            Console.WriteLine("Done");
        }
 public void TestEnumerator()
 {
     SharedQueue q = new SharedQueue();
     VolatileInt c1 = new VolatileInt();
     VolatileInt c2 = new VolatileInt();
     Thread t1 = new Thread(delegate() {
             foreach (int v in q) c1.v+=v;
         });
     Thread t2 = new Thread(delegate() {
             foreach (int v in q) c2.v+=v;
         });
     t1.Start();
     t2.Start();
     q.Enqueue(1);
     q.Enqueue(2);
     q.Enqueue(3);
     q.Close();
     t1.Join();
     t2.Join();
     Assert.AreEqual(6, c1.v + c2.v);
 }
 public void TestCloseWhenWaiting()
 {
     SharedQueue q = new SharedQueue();
     DelayedEnqueuer de = new DelayedEnqueuer(q, 0, null);
     Thread t =
     new Thread(new ThreadStart(de.BackgroundEofExpectingDequeue));
     t.Start();
     Thread.Sleep(SafetyMargin);
     q.Close();
     t.Join();
 }
 public void TestCloseWhenFull()
 {
     SharedQueue q = new SharedQueue();
     object v;
     q.Enqueue(1);
     q.Enqueue(2);
     q.Enqueue(3);
     q.Close();
     DelayedEnqueuer de = new DelayedEnqueuer(q, 0, 4);
     ExpectEof(new Thunk(de.EnqueueValue));
     Assert.AreEqual(1, q.Dequeue());
     Assert.AreEqual(2, q.DequeueNoWait(0));
     bool r = q.Dequeue(1, out v);
     Assert.IsTrue(r);
     Assert.AreEqual(3, v);
     ExpectEof(new Thunk(de.Dequeue));
 }
 public void TestEnumerator()
 {
     var queue = new SharedQueue();
     var c1 = new VolatileInt();
     var c2 = new VolatileInt();
     var thread1 = new Thread(() => { foreach (int v in queue) c1.v += v; });
     var thread2 = new Thread(() => { foreach (int v in queue) c2.v += v; });
     thread1.Start();
     thread2.Start();
     queue.Enqueue(1);
     queue.Enqueue(2);
     queue.Enqueue(3);
     queue.Close();
     thread1.Join();
     thread2.Join();
     Assert.AreEqual(6, c1.v + c2.v);
 }