C#多线程中如何运用互斥锁Mutex

C#多线程中如何运用互斥锁Mutex,第1张

概述互斥锁(Mutex)互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。

互斥锁(Mutex)

互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。

互斥锁可适用于一个共享资源每次只能被一个线程访问的情况

 函数:

//创建一个处于未获取状态的互斥锁Public Mutex();//如果owned为true,互斥锁的初始状态就是被主线程所获取,否则处于未获取状态Public Mutex(bool owned);

 如果要获取一个互斥锁。应调用互斥锁上的WaitOne()方法,该方法继承于Thread.WaitHandle类

它处于等到状态直至所调用互斥锁可以被获取,因此该方法将组织住主调线程直到指定的互斥锁可用,如果不需要拥有互斥锁,用ReleaseMutex方法释放,从而使互斥锁可以被另外一个线程所获取。

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();  } }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的C#多线程中如何运用互斥锁Mutex全部内容,希望文章能够帮你解决C#多线程中如何运用互斥锁Mutex所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1255675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存