A quick solution to producer consumer problem. I am sure this can be
improved..(and might even have bugs)..


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Algorithms
{

class ProducerConsumer
{
private static Queue<int> buffer = new Queue<int>();
static AutoResetEvent producerEvent = new AutoResetEvent(false);
static AutoResetEvent consumerEvent = new AutoResetEvent(false);
public static void Producer()
{
while (true)
{
lock(buffer)
{
if (buffer.Count == 0)
{
buffer.Enqueue(1);
Console.WriteLine( Thread.CurrentThread.Name + "has produced");
consumerEvent.Set();
}
}
}
}

public static void Consumer()
{
while(true)
{
lock(buffer)
{
if (buffer.Count == 1)
{
buffer.Dequeue();
Console.WriteLine(Thread.CurrentThread.Name + "has consumed");
}
}
consumerEvent.WaitOne();
}
}


public static void Main(string[] args)
{
Console.WriteLine("hello");
Thread producer = new Thread(Producer);
producer.Name = "producer0";
Thread producer1 = new Thread(Producer);
producer1.Name = "producer1";
Thread producer2 = new Thread(Producer);
producer2.Name = "producer2";
Thread consumer = new Thread(Consumer);
consumer.Name = "Consumer0";
Thread consumer1 = new Thread(Consumer);
consumer1.Name = "Consumer1";
Thread consumer2 = new Thread(Consumer);
consumer2.Name = "Consumer2";
producer.Start();
producer1.Start();
producer2.Start();
consumer.Start();
consumer1.Start();
consumer2.Start();

}
}
}

Comments

Popular posts from this blog

Impossible