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英寸大直屏和旗舰级影像
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音

