Home
Browse all 647 examples
Download all 647 examples
Download sample chapters
Reviews
Errata
Acknowledgments
Links on .NET
Paradoxal Press

Buy directly from Paradoxal Press at $33.99 (Save 43%)



Category: Programming
Level: Beginner to seasoned
900 pages
ISBN-10 097661322-0
ISBN-13 978-097661322-0
$59.99 USA
$79.99 CANADA


Listing 5-18 extracted from chapter Processes, threads and synchronization


Listing 5-17<     > Listing 5-19


This listing can be compiled with the command line:
csc.exe /target:exe Example_5_18.cs
Errors: 0 Warnings: 0


Example_5_18.cs
using System;
using System.Runtime.Remoting.Contexts;
using System.Threading;
[SynchronizationSynchronizationAttribute.REQUIRES_NEW, true )]
public class Foo1 : ContextBoundObject {
   public void DisplayThreadId() {
      Console.WriteLine( "Foo1 Begin: ManagedThreadId = " +
                         Thread.CurrentThread.ManagedThreadId );
      Thread.Sleep( 1000 );
      Foo2 obj2 = new Foo2();
      obj2.DisplayThreadId();
      Console.WriteLine( "Foo1 End:   ManagedThreadId = " +
                         Thread.CurrentThread.ManagedThreadId );
   }
}
[SynchronizationSynchronizationAttribute.REQUIRED )]
public class Foo2 : ContextBoundObject {
   public void DisplayThreadId() {
      Console.WriteLine( "Foo2 Begin: ManagedThreadId = " +
                         Thread.CurrentThread.ManagedThreadId );
      Thread.Sleep( 1000 );
      Foo3 obj3 = new Foo3();
      obj3.DisplayThreadId();
      Console.WriteLine( "Foo2 End:   ManagedThreadId = " +
                         Thread.CurrentThread.ManagedThreadId );
   }
}
// We can be sure that instances of the 'Foo3' class will never reside
// in any synchronization domain.
[SynchronizationSynchronizationAttribute.NOT_SUPPORTED )]
public class Foo3 : ContextBoundObject {
   public void DisplayThreadId() {
      Console.WriteLine( "Foo3 Begin: ManagedThreadId = " +
                         Thread.CurrentThread.ManagedThreadId );
      Thread.Sleep( 1000 );
      Console.WriteLine( "Foo3 End:   ManagedThreadId = " +
                         Thread.CurrentThread.ManagedThreadId );
   }
}
public class Program {
   static Foo1 m_Objet = new Foo1();
   static void Main() {
      Thread t1 = new Thread( ThreadProc );
      Thread t2 = new Thread( ThreadProc );
      t1.Start(); t2.Start();
      t1.Join(); t2.Join();
   }
   static void ThreadProc() {
      m_Objet.DisplayThreadId();
   }
}	
Copyright Patrick Smacchia 2006 2007