Csharp/C Sharp/Thread/Thread Lock
illustrates the use of the Interlocked object
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example14_9.cs illustrates the use of the Interlocked object
*/
using System;
using System.Threading;
public class Example14_9
{
// a shared counter
private int Runs = 0;
// the CountUp method increments the shared counter
public void CountUp()
{
while (Runs < 10)
{
Interlocked.Increment(ref Runs);
Console.WriteLine(Thread.CurrentThread.Name + " " + Runs);
Thread.Sleep(1000);
}
}
public static void Main()
{
// Make an instance of this class
Example14_9 ex = new Example14_9();
// And run the test outside of the static method
ex.RunThreads();
}
public void RunThreads()
{
// create and launch two threads
Thread t2 = new Thread(new ThreadStart(CountUp));
t2.Name = "t2";
Thread t3 = new Thread(new ThreadStart(CountUp));
t3.Name = "t3";
t2.Start();
t3.Start();
}
}
illustrates the use of the lock object
/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example14_8.cs illustrates the use of the lock object
*/
using System;
using System.Threading;
public class Example14_8
{
// a shared counter
private int Runs = 0;
// the CountUp method increments the shared counter
public void CountUp()
{
while (Runs < 10)
{
lock(this)
{
int Temp = Runs;
Temp++;
Console.WriteLine(Thread.CurrentThread.Name + " " + Temp);
Thread.Sleep(1000);
Runs = Temp;
}
}
}
public static void Main()
{
// Make an instance of this class
Example14_8 ex = new Example14_8();
// And run the test outside of the static method
ex.RunThreads();
}
public void RunThreads()
{
// create and launch two threads
Thread t2 = new Thread(new ThreadStart(CountUp));
t2.Name = "t2";
Thread t3 = new Thread(new ThreadStart(CountUp));
t3.Name = "t3";
t2.Start();
t3.Start();
}
}