Mega Code Archive

 
Categories / C# Tutorial / Thread
 

Producerconsumer

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; using System.Security; using System.Text; using System.Threading; public class MainClass {     private static Queue<string> sharedQueue = new Queue<string>();         public static void Main()     {         Thread t1 = new Thread(Producer);         Thread t2 = new Thread(Consumer);         t1.Start();         t2.Start();         // Join on them:         t1.Join();         t2.Join();     }     private static void Producer()     {         for (int i = 0; i < 2; i++)         {             string item = "Item#" + i;             lock (sharedQueue)             {                 sharedQueue.Enqueue(item);                 Monitor.Pulse(sharedQueue);             }         }     }     private static void Consumer()     {         for (int i = 0; i < 2; i++)         {             string item = null;             lock (sharedQueue)             {                 while (sharedQueue.Count == 0)                     Monitor.Wait(sharedQueue);                 item = sharedQueue.Dequeue();             }             Console.WriteLine("Processing item: {0}", item);         }     } } Processing item: Item#0 Processing item: Item#1