private void monitorNotationExample( object lockObject ) { Monitor.Enter( lockObject ); //Critical Section: Do something Monitor.Exit( lockObject ); }
class Program { static void Main( string[] args ) { AsyncTest test = new AsyncTest( ); Thread thread1 = new Thread( new ThreadStart( test.Sync1 ) ); Thread thread2 = new Thread( new ThreadStart( test.Sync2 ) ); thread1.Start( ); thread2.Start( ); Console.ReadLine( ); } } public class AsyncTest { private object lock1 = new object( ); public void Sync1( ) { Monitor.Enter(lock1); for ( int i = 1; i <= 20; i++ ) { Console.Write( "1 {0}|", i ); Thread.Sleep( 20 ); } Monitor.Exit( lock1 ); } public void Sync2( ) { Monitor.Enter( lock1 ); for ( int i = 1; i <= 20; i++ ) { Console.Write( "2 {0}|", i ); Thread.Sleep( 20 ); } Monitor.Exit( lock1 ); } }
class Program { static void Main( string[] args ) { AsyncTest test = new AsyncTest( ); Thread thread1 = new Thread( new ThreadStart( test.Sync1 ) ); Thread thread2 = new Thread( new ThreadStart( test.Sync3 ) ); thread1.Start( ); thread2.Start( ); Console.ReadLine( ); } } public class AsyncTest { private object lock1 = new object( ); public void Sync1( ) { Monitor.Enter(lock1); for ( int i = 1; i <= 20; i++ ) { Console.Write( "1 {0}|", i ); Thread.Sleep( 20 ); } Monitor.Exit( lock1 ); } public void Sync3( ) { if ( Monitor.TryEnter( lock1 ) ) { Console.WriteLine( Environment.NewLine + "Lock achieved." ); Monitor.Exit( lock1 ); } else { Console.WriteLine( Environment.NewLine + "Lock cannot be achieved." ); } } }
public void Sync4( ) { if ( Monitor.TryEnter( lock1, 100 ) ) { Console.WriteLine( Environment.NewLine + "Lock achieved." ); Monitor.Exit( lock1 ); } else { Console.WriteLine( Environment.NewLine + "Lock cannot be achieved." ); } }
public void Sync6( ) { if ( Monitor.TryEnter( lock1, 1000 ) ) { try { //Critical section } finally { Monitor.Exit( lock1 ); } } else { //else-Fall behandeln } }
Theme based on MadsSimple dasBlog theme by Mads Kristensen
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.