using System;
using System.Threading;
namespace ThreadDemo_Mutex
{
class Program
{
static void Main(string[] args)
{
const string MutexName = "CSharpThreadingCookbook";
using (var m = new Mutex(false, MutexName))
{
if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
{
Console.WriteLine("Second instance is running!");
Console.ReadKey();
}
else
{
Console.WriteLine("Running");
Console.ReadKey();
m.ReleaseMutex();
}
}
}
}
}
當主程序啓動時,定義了一個指定名稱的互斥量,設置initialOwner標誌爲false。這意味着如果互斥量已經被創建,則允許程序獲取該互斥量。如果沒有獲取該互斥量,程序則簡單地顯示Running,等待直到按下了任何鍵,然後釋放該互斥量並退出。
如果再運行同樣一個程序,則會在5秒鐘內嘗試獲取互斥量。如果此時在第一個程序中按下任何鍵,第二個程序則會開始執行。然而,如果保持等待5秒鐘,第二個程序將無法獲取到互斥量。
該方法可用於在不同的程序中同步線程,可被推廣到大量的使用場景中。