Increment Monitor : Monitor « Thread « C# / CSharp Tutorial






using System;
using System.Threading;

public class MainClass
{
  private static Object locker = new Object();
  private static int count = 0;

  public int IncrementCount()
  {
    int rc;

    lock( locker )
    {
      rc = ++count;
    }

    return rc;
  }

  public void DoCount()
  {
    for( int i = 0; i < 10; i++ )
    {
      System.Console.WriteLine( "Thread {0}: count = {1}", Thread.CurrentThread.Name, IncrementCount() );
      Thread.Sleep( 0 );
    }
  }

  [STAThread]
  static void Main(string[] args)
  {
    int limit = 10;

    Thread[] t = new Thread[ limit ];

    for(int k = 0; k < limit; k++ )
    {
      MainClass b = new MainClass();
      t[ k ] = new Thread( new ThreadStart( b.DoCount ) );
      t[ k ].Name = "Thread " + k;
    }

    for(int k = 0; k < limit; k++ )
    {
      t[ k ].Start();
    }

    for(int k = 0; k < limit; k++ )
    {
      t[ k ].Join();
    }

    System.Console.WriteLine( "All threads complete" );
  }
}








20.19.Monitor
20.19.1.Use Wait() and Pulse() to create a ticking clock
20.19.2.Use Monitors
20.19.3.Monitor: Enter and Exit
20.19.4.Monitor: try to enter
20.19.5.Coordinate two threads using Monitor
20.19.6.Use Monitor to control more than one Threads
20.19.7.Increment Monitor
20.19.8.Monitor Pool
20.19.9.Throw exception between Monitor.Enter and Montor.Exit
20.19.10.Using A Monitor
20.19.11.Use lock and Monitor to coordinate Producer and Consumer