c# mutex互斥量的深刻解析。本站提示廣大學習愛好者:(c# mutex互斥量的深刻解析)文章只能為提供參考,不一定能成為您想要的結果。以下是c# mutex互斥量的深刻解析正文
互斥鎖(Mutex)
互斥鎖是一個互斥的同步對象,意味著統一時光有且唯一一個線程可以獲得它。
互斥鎖可實用於一個同享資本每次只能被一個線程拜訪的情形
函數:
//創立一個處於未獲得狀況的互斥鎖
Public Mutex();
//假如owned為true,互斥鎖的初始狀況就是被主線程所獲得,不然處於未獲得狀況
Public Mutex(bool owned);
假如要獲得一個互斥鎖。應挪用互斥鎖上的WaitOne()辦法,該辦法繼續於Thread.WaitHandle類
它處於比及狀況直至所挪用互斥鎖可以被獲得,是以該辦法將組織住主調線程直到指定的互斥鎖可用,假如不須要具有互斥鎖,用ReleaseMutex辦法釋放,從而使互斥鎖可以被別的一個線程所獲得
//Public Mutex(bool owned,name,out flag);
name為互斥量的名字,也就是說在操作體系中只要一個定名為name的互斥量mutex,假如一個線程獲得這個name的互斥鎖,其他線程就沒法獲得這個互斥鎖了,必需期待誰人線程對這個線程釋放
參考他人的博客的代碼試驗
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace myConApp
{
class Test
{
/// <summary>
/// 運用法式的主進口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
bool flag = false;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);
//第一個參數:true--給挪用線程付與互斥體的初始所屬權
//第一個參數:互斥體的稱號
//第三個參數:前往值,假如挪用線程已被授與互斥體的初始所屬權,則前往true
if (flag)
{
Console.Write("Running");
}
else
{
Console.Write("Another is Running");
System.Threading.Thread.Sleep(5000);//線程掛起5秒鐘
Environment.Exit(1);//加入法式
}
Console.ReadLine();
}
}
}
運轉以上代碼生成的運用法式第一個實例,會獲得成果
Running
堅持第一個運轉狀況,運轉第二個實例,獲得成果
Another is Running
以上代碼中創立了一個mutex,從其參數的說明中得知,第一個挪用線程將獲得互斥體的初始所屬權,假如不釋放的話,其他的線程得不到互斥體一切權
1.運轉兩個工程,同時將以上代碼放入工程中,第一個工程運轉,獲得成果
Running
堅持第一個運轉狀況,運轉第二個工程,獲得成果
Another is Running
2.將一個工程中的System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);改成
System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test1", out flag);
然後第一個工程運轉,獲得成果
Running
堅持第一個運轉狀況,運轉第二個工程,獲得成果
Running
則解釋在體系中,mutex的name是在體系中是獨一的。