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

发布时间 - 2026-01-11 02:00:15    点击率:

互斥锁(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  # C#多线程死锁介绍与案例代码  # C#在复杂多线程环境下使用读写锁同步写入文件  # C#使用读写锁解决多线程并发问题  # C#多线程系列之读写锁  # C#多线程系列之多线程锁lock和Monitor  # c#多线程之间的排他锁的实现  # C#笔试题之同线程Lock语句递归不会死锁  # C#使用读写锁三行代码简单解决多线程并发的问题  # C#多线程编程中的锁系统(四):自旋锁  # C#多线程编程中的锁系统(三)  # C#多线程编程中的锁系统(二)  # C#多线程编程中的锁系统基本用法  # C#多线程之线程锁  # 互斥  # 是一个  # 不需要  # 正在等待  # 适用于  # 另外一个  # 创建一个  # 大家多多  # 有一个  # 从而使  # Thread  # WaitHandle  # ReleaseMutex  # Linq  # Text  # Threading  # System  # Collections  # Generic  # pre 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用5美元大硬盘VPS安全高效搭建个人网站?  JavaScript常见的五种数组去重的方式  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  重庆市网站制作公司,重庆招聘网站哪个好?  Android使用GridView实现日历的简单功能  如何在宝塔面板中修改默认建站目录?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  如何基于PHP生成高效IDC网络公司建站源码?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  如何用y主机助手快速搭建网站?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  JavaScript实现Fly Bird小游戏  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何选择PHP开源工具快速搭建网站?  如何用wdcp快速搭建高效网站?  ,南京靠谱的征婚网站?  详解jQuery停止动画——stop()方法的使用  Android GridView 滑动条设置一直显示状态(推荐)  如何在IIS中新建站点并解决端口绑定冲突?  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel如何使用Gate和Policy进行授权?(权限控制)  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何快速搭建高效香港服务器网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  如何快速选择适合个人网站的云服务器配置?  如何获取免费开源的自助建站系统源码?  🚀拖拽式CMS建站能否实现高效与个性化并存?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Python数据仓库与ETL构建实战_Airflow调度流程详解  详解Android图表 MPAndroidChart折线图  JavaScript如何操作视频_媒体API怎么控制播放  长沙做网站要多少钱,长沙国安网络怎么样?  用yum安装MySQLdb模块的步骤方法  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  大型企业网站制作流程,做网站需要注册公司吗?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音