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;
[Synchronization( SynchronizationAttribute.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 );
}
}
[Synchronization( SynchronizationAttribute.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.
[Synchronization( SynchronizationAttribute.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
|