欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#多線程中的互斥鎖Mutex

 更新時間:2022年04月20日 09:16:37   作者:農(nóng)碼一生  
這篇文章介紹了C#多線程中的互斥鎖Mutex,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、簡介

Mutex的突出特點是可以跨應用程序域邊界對資源進行獨占訪問,即可以用于同步不同進程中的線程,這種功能當然這是以犧牲更多的系統(tǒng)資源為代價的。

主要常用的兩個方法:

  • public virtual bool WaitOne() 阻止當前線程,直到當前 System.Threading.WaitHandle 收到信號獲取互斥鎖。
  • public void ReleaseMutex() 釋放 System.Threading.Mutex 一次。

二、代碼

案例一:

    class Program
    {
        private static Mutex mutex = new Mutex();
        static void Main(string[] args)
        {
            Thread[] thread = new Thread[3];
            for (int i = 0; i < 3; i++)
            {
                thread[i] = new Thread(ThreadMethod1);//方法引用
                thread[i].Name = "Thread-" + (i+1).ToString();
            }
            for (int i = 0; i < 3; i++)
            {
                thread[i].Start();
            }
            Console.ReadKey();
        }
        public static void ThreadMethod1(object val)
        {           
            mutex.WaitOne();    //獲取鎖
            for (int i = 1; i <=5; i++)
            {
                Console.WriteLine("{0}循環(huán)了{1}次", Thread.CurrentThread.Name, i);
            }
            mutex.ReleaseMutex();  //釋放鎖
        }
    }

運行結果:

案例二:

    class Program
    {
        private static Mutex mutex = new Mutex();
        private static int sum = 0;
        static void Main(string[] args)
        {
            Task<int> task = new Task<int>(ThreadFunction);
            task.Start();
            Console.WriteLine($"{DateTime.Now} task started!");
            Thread.Sleep(2000);//Main主線程

            Console.WriteLine($"{DateTime.Now} Get siginal in Main!");
            mutex.WaitOne();
            Console.WriteLine($"{DateTime.Now} Get siginal in main!");

            Console.WriteLine($"{DateTime.Now} Result is {task.Result}");
            Console.ReadKey();
        }
        private static int ThreadFunction()
        {
            Console.WriteLine($"{DateTime.Now} Get siginal in ThreadFunction!");
            mutex.WaitOne();  //獲取鎖
            for (int i = 0; i <= 10; i++)
            {
                sum += i;
                Thread.Sleep(1000);
            }
            Console.WriteLine($"{DateTime.Now} Release mutex in ThreadFunction!");
            mutex.ReleaseMutex();  //釋放鎖

            return sum;
        }
    }

運行結果:

三、總結

為避免發(fā)送多線程發(fā)生死鎖,Mutex的WaitOne()和ReleaseMutex()需成對配合使用。

到此這篇關于C#互斥鎖Mutex的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 經(jīng)典的委托排序(深入分析)

    經(jīng)典的委托排序(深入分析)

    本篇文章是對委托排序進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C#用戶控件之溫度計設計

    C#用戶控件之溫度計設計

    這篇文章主要為大家詳細介紹了C#用戶控件之溫度計的設計方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • unity實現(xiàn)屏幕上寫字效果

    unity實現(xiàn)屏幕上寫字效果

    這篇文章主要為大家詳細介紹了unity實現(xiàn)屏幕上寫字效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C#中生成DLL及其事件的處理

    C#中生成DLL及其事件的處理

    在C#中,創(chuàng)建動態(tài)鏈接庫是一個常見的任務,本文主要介紹了C#中生成DLL及其事件的處理,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • C#開發(fā)簡易winform計算器程序

    C#開發(fā)簡易winform計算器程序

    這篇文章主要為大家詳細介紹了C#開發(fā)簡易winform計算器程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C# 漢字轉化拼音的簡單實例代碼

    C# 漢字轉化拼音的簡單實例代碼

    C# 漢字轉化拼音的簡單實例代碼,需要的朋友可以參考一下
    2013-04-04
  • C# 實現(xiàn)WebSocket服務端教程

    C# 實現(xiàn)WebSocket服務端教程

    這篇文章主要介紹了C# 實現(xiàn)WebSocket服務端教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • C#讀寫文件的方法匯總

    C#讀寫文件的方法匯總

    C#讀寫文件的方法匯總,需要的朋友可以參考一下
    2013-03-03
  • C#中利用斷點操作調試程序的步驟詳解

    C#中利用斷點操作調試程序的步驟詳解

    所謂斷點調試就是檢測執(zhí)行路徑和數(shù)據(jù)是否正確,中斷游戲運行在線調試,下面這篇文章主要給大家介紹了關于C#中利用斷點操作調試程序的相關資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-12-12
  • C#?輸出參數(shù)out問題

    C#?輸出參數(shù)out問題

    這篇文章主要介紹了C#?輸出參數(shù)out問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論