using System;
using System.Threading;
namespace ConsoleApplication1
{
// Use lock to synchronize access to an object(使用锁来同步访问对象)
class SumArray
{
int sum;
public int sumIt(int[] nums) {
lock (this) { // lock the entire method
sum = 0; // reset sum
for (int i = 0; i < nums.Length; i++) {
sum += nums[i];
Console.WriteLine("Running total for" + Thread.CurrentThread.Name +
"is " + sum);
Thread.Sleep(10); // allow task-switch
}
return sum;
}
}
}
class MyThread {
public Thread thrd;
int[] a;
int answer;
/* Create one SumArray object for all
instances of MyThread.*/
static SumArray sa = new SumArray();
// Construct a new thread.
public MyThread(string name, int[] nums) {
a = nums;
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
// Begin ececution of new thread.
void run() {
Console.WriteLine(thrd.Name + "starting.");
answer = sa.sumIt(a);
Console.WriteLine("Sum for " + thrd.Name + " is " + answer);
Console.WriteLine(thrd.Name + "terminating.");
}
}
class sync
{
public static void Main() {
int[] a = { 1, 2, 3, 4, 5 };
MyThread mt1 = new MyThread("Child #1",a);
MyThread mt2 = new MyThread("Child #1",a);
mt1.thrd.Join();
mt2.thrd.Join();
Console.Read();
}
}
}