Use MethodImplAttribute to synchronize a method : Thread Sync : Thread C# Source Code


Custom Search

C# Source Code » Thread » Thread Sync »

 

Use MethodImplAttribute to synchronize a method









    

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// Use MethodImplAttribute to synchronize a method. 
 
using System; 
using System.Threading; 
using System.Runtime.CompilerServices; 
 
class TickTock { 
 
  /* The following attribute synchronizes the entire 
     tick() method. */ 
  [MethodImplAttribute(MethodImplOptions.Synchronized)] 
  public void tick(bool running) { 
    if(!running) { // stop the clock 
      Monitor.Pulse(this); // notify any waiting threads 
      return; 
    } 
 
    Console.Write("Tick "); 
    Monitor.Pulse(this); // let tock() run 
   
    Monitor.Wait(this); // wait for tock() to complete 
  } 
 
 
  /* The following attribute synchronizes the entire 
     tock() method. */ 
  [MethodImplAttribute(MethodImplOptions.Synchronized)] 
  public void tock(bool running) { 
    if(!running) { // stop the clock 
      Monitor.Pulse(this); // notify any waiting threads 
      return; 
    } 
 
    Console.WriteLine("Tock"); 
    Monitor.Pulse(this); // let tick() run 
 
    Monitor.Wait(this); // wait for tick to complete 
  } 
 
}  
 
class MyThread { 
  public Thread thrd; 
  TickTock ttOb; 
 
  // Construct a new thread. 
  public MyThread(string name, TickTock tt) { 
    thrd = new Thread(new ThreadStart(this.run)); 
    ttOb = tt; 
    thrd.Name = name; 
    thrd.Start();  
  } 
 
  // Begin execution of new thread. 
  void run() { 
    if(thrd.Name == "Tick") { 
      for(int i=0; i<5; i++) ttOb.tick(true); 
      ttOb.tick(false); 
    } 
    else { 
      for(int i=0; i<5; i++) ttOb.tock(true); 
      ttOb.tock(false); 
    } 
  } 
} 
 
public class TickingClock1 { 
  public static void Main() { 
    TickTock tt = new TickTock(); 
    MyThread mt1 = new MyThread("Tick", tt); 
    MyThread mt2 = new MyThread("Tock", tt); 
 
    mt1.thrd.Join(); 
    mt2.thrd.Join(); 
    Console.WriteLine("Clock Stopped"); 
  } 
}


           
       
    
   
  
   







HTML code for linking to this page:

Follow Navioo On Twitter

C# Source Code

 Navioo Thread
» Thread Sync