最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C# 多進程打開PPT的示例教程

    C# 多進程打開PPT的示例教程

    這篇文章主要介紹了C# 多進程打開PPT的示例教程,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#判斷一個字符串是否包含另一個字符串的方法

    C#判斷一個字符串是否包含另一個字符串的方法

    這篇文章主要介紹了C#判斷一個字符串是否包含另一個字符串的方法,涉及C#中IndexOf方法的使用技巧,非常簡單實用,需要的朋友可以參考下
    2015-04-04
  • WPF實現(xiàn)圖片合成或加水印的方法【2種方法】

    WPF實現(xiàn)圖片合成或加水印的方法【2種方法】

    這篇文章主要介紹了WPF實現(xiàn)圖片合成或加水印的方法,結合實例形式分析了2種比較實用的WPF圖片操作相關技巧,需要的朋友可以參考下
    2017-03-03
  • C#接口實現(xiàn)方法實例分析

    C#接口實現(xiàn)方法實例分析

    這篇文章主要介紹了C#接口實現(xiàn)方法,以實例形式較為詳細的分析了C#接口的功能、定義及實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 淺談c#中config.exe 引發(fā)的一些問題

    淺談c#中config.exe 引發(fā)的一些問題

    下面小編就為大家分享一篇淺談c#中config.exe 引發(fā)的一些問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C# 靜態(tài)構造函數(shù)使用總結

    C# 靜態(tài)構造函數(shù)使用總結

    今天花了一些時間把靜態(tài)構造函數(shù)的用法總結了一下,希望高手們指點。謝謝
    2013-03-03
  • c#各種Timer類的區(qū)別與用法介紹

    c#各種Timer類的區(qū)別與用法介紹

    System.Threading.Timer 是一個簡單的輕量計時器,它使用回調(diào)方法并由線程池線程提供服務。在必須更新用戶界面的情況下,建議不要使用該計時器,因為它的回調(diào)不在用戶界面線程上發(fā)生
    2013-10-10
  • 關于C#基礎知識回顧--反射(三)

    關于C#基礎知識回顧--反射(三)

    在前面例子中,由于MyClass類型的對象是顯示創(chuàng)建的,因此使用反射技術來調(diào)用MyClass上的方法沒有任何優(yōu)勢--以普通的方式調(diào)用對象上的方法會簡單的多
    2013-07-07
  • C#實現(xiàn)多個計時器記錄不同定時時間

    C#實現(xiàn)多個計時器記錄不同定時時間

    這篇文章主要為大家詳細介紹了C#實現(xiàn)多個計時器記錄不同定時時間,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • unity里獲取text中文字寬度并截斷省略的操作

    unity里獲取text中文字寬度并截斷省略的操作

    這篇文章主要介紹了unity里獲取text中文字寬度并截斷省略的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

开封县| 辽宁省| 茶陵县| 大丰市| 江口县| 德格县| 广东省| 漾濞| 莱阳市| 三原县| 许昌市| 申扎县| 城市| 乌什县| 额济纳旗| 青阳县| 穆棱市| 云安县| 卫辉市| 隆化县| 昌平区| 铁岭市| 应用必备| 临猗县| 井研县| 永城市| 高密市| 栾城县| 湘潭市| 甘洛县| 通城县| 简阳市| 永丰县| 治多县| 临泽县| 和硕县| 城市| 金平| 措勤县| 易门县| 临夏县|