Mega Code Archive

 
Categories / C# Tutorial / Thread
 

Use a Semaphore

using System;   using System.Threading;     class MyThread {     public Thread thrd;      static Semaphore sem = new Semaphore(2, 2);       public MyThread(string name) {       thrd = new Thread(this.run);       thrd.Name = name;       thrd.Start();     }        void run() {       Console.WriteLine(thrd.Name + " is waiting for a permit.");        sem.WaitOne();        Console.WriteLine(thrd.Name + " acquires a permit.");        for(int i=0;i<10;i++) {        Console.WriteLine(thrd.Name + " : " + i);        Thread.Sleep(50);       }         Console.WriteLine(thrd.Name + " releases a permit.");        sem.Release();    }   }        class MainClass {     public static void Main() {       MyThread mt1 = new MyThread("Thread #1");       MyThread mt2 = new MyThread("Thread #2");       MyThread mt3 = new MyThread("Thread #3");          mt1.thrd.Join();      mt2.thrd.Join();      mt3.thrd.Join();    }   } Thread #1 is waiting for a permit. Thread #1 acquires a permit. Thread #1 : 0 Thread #2 is waiting for a permit. Thread #2 acquires a permit. Thread #2 : 0 Thread #3 is waiting for a permit. Thread #1 : 1 Thread #2 : 1 Thread #1 : 2 Thread #2 : 2 Thread #1 : 3 Thread #2 : 3 Thread #2 : 4 Thread #1 : 4 Thread #2 : 5 Thread #1 : 5 Thread #2 : 6 Thread #1 : 6 Thread #1 : 7 Thread #2 : 7 Thread #1 : 8 Thread #2 : 8 Thread #1 : 9 Thread #2 : 9 Thread #1 releases a permit. Thread #3 acquires a permit. Thread #3 : 0 Thread #2 releases a permit. Thread #3 : 1 Thread #3 : 2 Thread #3 : 3 Thread #3 : 4 Thread #3 : 5 Thread #3 : 6 Thread #3 : 7 Thread #3 : 8 Thread #3 : 9 Thread #3 releases a permit.