/// <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); }
/// <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"); } }