, .
, , , .
, .
, , . , , - . , . lock . ? , : , lock. . , Sumlt () , lockOn . Sumlt () MyThread.
// , using System;
Using System.Threading;
class SumArray { int sum;
public int Sumlt(int[] nums) {
sum =0; //
for(int i=0; i < nums.Length; i++) { sum += nums[i];
Console.WriteLine(" " +
Thread.CurrentThread.Name + " " + sum); Thread.Sleep(10); //
}
Return sum;
}
}
class MyThread {
public Thread Thrd; int[] a; int answer;
/* SumArray MyThread. */ static SumArray sa = new SumArray();
// , public MyThread(string name, int[] nums) { a = nums;
Thrd = new Thread(this.Run);
Thrd.Name = name;
Thrd.Start(); //
}
// , void Run() {
Console.WriteLine(Thrd.Name + " .");
// Sumlt(). lock(sa) answer = sa.Sumlt(a);
Console.WriteLine(" " + Thrd.Name +
" " + answer);
Console.WriteLine(Thrd.Name + " .");
}
}
class Sync {
static void Main() {
int[] a = {1, 2, 3, 4, 5};
MyThread mtl = new MyThread(" #1", a);
MyThread mt2 = new MyThread(" #2", a);
Mtl.Thrd.Join(); mt2.Thrd.Join();
sa. Sum It (), Sum It (). , .
|
|
// Sumlt(). lock(sa) answer = sa.Sumlt(a);
sa , . , .
Monitor
lock C# , Monitor, System. Threading. , , . , Enter (), Exit (). :
public static void Enter(object obj) public static void Exit (object obj)
obj . , Enter () , . Enter () Exit () , lock . lock " " #.