亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# mutex互斥量的深入解析

 更新時(shí)間:2014年01月23日 08:55:19   作者:  
本篇文章主要是對(duì)c#中的mutex互斥量進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助

互斥鎖(Mutex)

互斥鎖是一個(gè)互斥的同步對(duì)象,意味著同一時(shí)間有且僅有一個(gè)線程可以獲取它。

互斥鎖可適用于一個(gè)共享資源每次只能被一個(gè)線程訪問的情況

 函數(shù):

//創(chuàng)建一個(gè)處于未獲取狀態(tài)的互斥鎖

Public Mutex();

//如果owned為true,互斥鎖的初始狀態(tài)就是被主線程所獲取,否則處于未獲取狀態(tài)

 Public Mutex(bool owned);

 如果要獲取一個(gè)互斥鎖。應(yīng)調(diào)用互斥鎖上的WaitOne()方法,該方法繼承于Thread.WaitHandle類

它處于等到狀態(tài)直至所調(diào)用互斥鎖可以被獲取,因此該方法將組織住主調(diào)線程直到指定的互斥鎖可用,如果不需要擁有互斥鎖,用ReleaseMutex方法釋放,從而使互斥鎖可以被另外一個(gè)線程所獲取

//Public Mutex(bool owned,name,out flag);

name為互斥量的名字,也就是說在操作系統(tǒng)中只有一個(gè)命名為name的互斥量mutex,如果一個(gè)線程得到這個(gè)name的互斥鎖,其他線程就無(wú)法得到這個(gè)互斥鎖了,必須等待那個(gè)線程對(duì)這個(gè)線程釋放

參考別人的博客的代碼實(shí)驗(yàn)

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace myConApp
{
    class Test
    {
        /// <summary>
        /// 應(yīng)用程序的主入口點(diǎn)。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            bool flag = false;
            System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);
            //第一個(gè)參數(shù):true--給調(diào)用線程賦予互斥體的初始所屬權(quán)
            //第一個(gè)參數(shù):互斥體的名稱
            //第三個(gè)參數(shù):返回值,如果調(diào)用線程已被授予互斥體的初始所屬權(quán),則返回true
            if (flag)
            {
                Console.Write("Running");
            }
            else
            {
                Console.Write("Another is Running");
                System.Threading.Thread.Sleep(5000);//線程掛起5秒鐘
                Environment.Exit(1);//退出程序
            }
            Console.ReadLine();

        }
    }
}


 運(yùn)行以上代碼生成的應(yīng)用程序第一個(gè)實(shí)例,會(huì)得到結(jié)果

Running
 保持第一個(gè)運(yùn)行狀態(tài),運(yùn)行第二個(gè)實(shí)例,得到結(jié)果

Another is Running
 以上代碼中創(chuàng)建了一個(gè)mutex,從其參數(shù)的解釋中得知,第一個(gè)調(diào)用線程將得到互斥體的初始所屬權(quán),如果不釋放的話,其他的線程得不到互斥體所有權(quán)

1.運(yùn)行兩個(gè)工程,同時(shí)將以上代碼放入工程中,第一個(gè)工程運(yùn)行,得到結(jié)果

Running
 保持第一個(gè)運(yùn)行狀態(tài),運(yùn)行第二個(gè)工程,得到結(jié)果

Another is Running

2.將一個(gè)工程中的System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);改為

System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test1", out flag);

然后第一個(gè)工程運(yùn)行,得到結(jié)果

Running
 保持第一個(gè)運(yùn)行狀態(tài),運(yùn)行第二個(gè)工程,得到結(jié)果

Running
則說明在系統(tǒng)中,mutex的name是在系統(tǒng)中是唯一的。

相關(guān)文章

最新評(píng)論