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 sharedQueue = new Queue();
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