예제 #1
0
        /// <summary>
        /// Receive a message from the channel with unlimited timeout.
        /// </summary>
        /// <returns>The received object.</returns>
        /// <remarks>This member is thread safe.</remarks>
        public object Receive()
        {
            full.Acquire();
            object item = queue.Dequeue();

            empty.Release();
            return(item);
        }
예제 #2
0
        /// <summary>
        /// Block until another thread calls the same method.
        /// </summary>
        public void RendezVous()
        {
            bool s;

            lock (this)
            {
                s       = select;
                select ^= true;
            }
            if (s)
            {
                Console.WriteLine("RV: AA");
                right.Release();
                Console.WriteLine("RV: AB");
                left.Acquire();
                Console.WriteLine("RV: AC");
            }
            else
            {
                Console.WriteLine("RV: BA");
                left.Release();
                Console.WriteLine("RV: BB");
                right.Acquire();
                Console.WriteLine("RV: BC");
            }
        }