I.概要
-
C#のMutexクラスは、スレッド同期操作にも使用されます。たとえば、複数のスレッドが同時にリソースにアクセスする場合、一度に1つのスレッドのみがリソースにアクセスできることが保証されます。
-
Mutexクラスでは、WaitOne()メソッドを使用してリソースが解放されるのを待機し、ReleaseMutex()メソッドを使用してリソースを解放します。
-
WaitOne()メソッドは、ReleaseMutex()メソッドが終了するまで終了しません。
<!-もっと->
2つの例スレッド相互除外を使用して、各駐車スペースが一度に1台の車しか駐車できないという機能を実現します
2.1コード
<span style="color:#333333">class Program
{
private static Mutex mutex = new Mutex();
public static void PakingSpace(object num)
{
if (mutex.WaitOne())
{
try
{
Console.WriteLine("车牌号{0}的车驶入!", num);
Thread.Sleep(1000);
}
finally
{
Console.WriteLine("车牌号{0}的车离开!", num);
mutex.ReleaseMutex();
}
}
}
static void Main(string[] args)
{
ParameterizedThreadStart ts = new ParameterizedThreadStart(PakingSpace);
Thread t1 = new Thread(ts);
t1.Start("冀A12345");
Thread t2 = new Thread(ts);
t2.Start("京A00000");
}
}</span>
2.2結果
2.3説明
上記の走行効果から、各車が出入りした後、他の車が駐車スペースを占有できる、つまり、スレッドがリソースを占有している場合、他のスレッドはそのリソースを使用しないことがわかります。