Mega Code Archive

 
Categories / C# / Thread
 

Monitor Pulse

using System; using System.Threading; class MessageBoard {     private String messages = "no messages";     public void Reader() {         try {             Monitor.Enter(this);             if (messages == "no messages") {                 Console.WriteLine("{0} {1}",Thread.CurrentThread.Name, messages);                 Console.WriteLine("{0} waiting",Thread.CurrentThread.Name);                 Monitor.Wait(this);             }             Console.WriteLine("{0} {1}",Thread.CurrentThread.Name, messages);         } finally {             Monitor.Exit(this);         }     }     public void Writer() {         try {             Monitor.Enter(this);             messages = "Greetings!";             Console.WriteLine("{0} Done writing message",Thread.CurrentThread.Name);             Monitor.Pulse(this);         } finally {             Monitor.Exit(this);         }     }     public static void Main() {         MessageBoard myMessageBoard = new MessageBoard();         Thread reader = new Thread(new ThreadStart(myMessageBoard.Reader));         reader.Name = "ReaderThread:";         Thread writer = new Thread(new ThreadStart(myMessageBoard.Writer));         writer.Name = "WriterThread:";         reader.Start();         writer.Start();     } }