Use a Semaphore : Semaphore : Thread C# Examples


C# Examples » Thread » Semaphore »

 

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();  
    }    
}
    
   
  
   



Output

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.


HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Thread
» Semaphore