Public void ReleaseMutex()
ReleaseMutex () , , .
WaitOne () ReleaseMutex () , .
Mutex myMtx = new Mutex();
//...
myMtx.WaitOne(); // // .
myMtx.ReleaseMutex(); //
WaitOne () , . ReleaseMutex () . .
. IncThreadn DecThread, : SharedRes. Count. IncThread SharedRes. Count , DecThread . SharedRes. Count Mtx, SharedRes.
// .
Using System;
Using System.Threading;
// ( Count),
// (Mtx), . class SharedRes {
public static int Count = 0;
public static Mutex Mtx = new Mutex();
}
// SharedRes.Count , class IncThread { int num;
Public Thread Thrd;
public IncThread(string name, int n) {
Thrd = new Thread(this.Run); num = n;
Thrd.Name = name;
Thrd.Start();
}
// , void Run() {
Console.WriteLine(Thrd.Name + " .");
// .
SharedRes.Mtx.WaitOne();
Console.WriteLine(Thrd.Name + " ."); do {
Thread.Sleep (500);
SharedRes.Count++;
Console.WriteLine(" " + Thrd.Name +
", SharedRes.Count = " + SharedRes.Count);
Num;
} while(num > 0);
Console.WriteLine(Thrd.Name + " .");
// .
SharedRes.Mtx.ReleaseMutex();
}
}
// SharedRes.Count , class DecThread { int num;
Public Thread Thrd;
public DecThread(string name, int n) {
Thrd = new Thread(new ThreadStart(this.Run)); num = n;
Thrd.Name = name;
Thrd.Start();
}
// , void Run() {
Console.WriteLine(Thrd.Name + " .");
// .
SharedRes.Mtx.WaitOne();
Console.WriteLine(Thrd.Name + " ."); do {
|
|
Thread.Sleep(500);
SharedRes.Count;
Console.WriteLine(" " + Thrd.Name +
", SharedRes.Count = " + SharedRes.Count);
Num;
} while(num > 0);
Console.WriteLine(Thrd.Name + " .");
// .
SharedRes.Mtx.ReleaseMutex();
}
}
class MutexDemo {
static void Main() {
// .
IncThread mtl = new IncThread(" ", 5); Thread.Sleep(1); // DecThread mt2 = new DecThread(" ", 5);
Mtl.Thrd.Join();
Mt2.Thrd.Join();
}
}
.
.
.
.
.
, ( SharedRes. Count) , .
, , WaitOne () ReleaseMutex () . , .