Producer/consumer : Producer Consumer « Thread « C# / CSharp Tutorial






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








20.22.Producer Consumer
20.22.1.Producer and consumer
20.22.2.Producer/consumer
20.22.3.Consumer Producer with Monitor
20.22.4.Philosopher Example