程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# mutex互斥量的深刻解析

c# mutex互斥量的深刻解析

編輯:C#入門知識

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是在體系中是獨一的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved