c# 多線程 –Mutex(互斥鎖)

來源:互聯網
上載者:User

互斥鎖(Mutex)

互斥鎖是一個互斥的同步對象,意味著同一時間有且僅有一個線程可以擷取它。

互斥鎖可適用於一個共用資源每次只能被一個線程訪問的情況

 函數:

//建立一個處於未擷取狀態的互斥鎖

Public Mutex();

//如果owned為true,互斥鎖的初始狀態就是被主線程所擷取,否則處於未擷取狀態

 Public Mutex(bool owned);

 如果要擷取一個互斥鎖。應調用互斥鎖上的WaitOne()方法,該方法繼承於Thread.WaitHandle類

它處於等到狀態直至所調用互斥鎖可以被擷取,因此該方法將組織住主調線程直到指定的互斥鎖可用,如果不需要擁有互斥鎖,用ReleaseMutex方法釋放,從而使互斥鎖可以被另外一個線程所擷取。

?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 using System; using System.Collections.Generic; using System.Linq; using System.Text;   using System.Threading;   namespace MyTTCon {     class shareRes     {         public static int count = 0;         public static Mutex mutex = new Mutex();     }       class IncThread     {         int number;         public Thread thrd;         public IncThread(string name, int n)         {             thrd = new Thread(this.run);             number = n;             thrd.Name = name;             thrd.Start();         }         void run()         {             Console.WriteLine(thrd.Name + "正在等待 the mutex");             //申請             shareRes.mutex.WaitOne();             Console.WriteLine(thrd.Name + "申請到 the mutex");             do            {                 Thread.Sleep(1000);                 shareRes.count++;                 Console.WriteLine("In " + thrd.Name + "ShareRes.count is " + shareRes.count);                 number--;             } while (number > 0);             Console.WriteLine(thrd.Name + "釋放 the nmutex");             //  釋放             shareRes.mutex.ReleaseMutex();         }     }     class DecThread     {         int number;         public Thread thrd;         public DecThread(string name, int n)         {             thrd = new Thread(this.run);             number = n;             thrd.Name = name;             thrd.Start();         }         void run()         {             Console.WriteLine(thrd.Name + "正在等待 the mutex");             //申請             shareRes.mutex.WaitOne();             Console.WriteLine(thrd.Name + "申請到 the mutex");             do            {                 Thread.Sleep(1000);                 shareRes.count--;                 Console.WriteLine("In " + thrd.Name + "ShareRes.count is " + shareRes.count);                 number--;             } while (number > 0);             Console.WriteLine(thrd.Name + "釋放 the nmutex");             //  釋放             shareRes.mutex.ReleaseMutex();         }     }       class Program     {         static void Main(string[] args)         {             IncThread mthrd1 = new IncThread("IncThread thread ", 5);             DecThread mthrd2 = new DecThread("DecThread thread ", 5);             mthrd1.thrd.Join();             mthrd2.thrd.Join();         }     } }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.