C# Mutex互斥锁
Mutex 构造函数 (Boolean, String, Boolean)
public Mutex (
bool initiallyOwned,
string name,
out bool createdNew
)
参数
- initiallyOwned
-
如果为 true,则给予调用线程已命名的系统互斥体的初始所属权(如果已命名的系统互斥体是通过此调用创建的);否则为 false。
- name
-
Mutex 的名称。如果值为 空引用(在 Visual Basic 中为 Nothing),则 Mutex 是未命名的。
- createdNew
- 如果调用线程已被授予互斥体的初始所属权,则此方法返回时包含布尔值 true;否则包含布尔值 false。该参数未经初始化即被传递
- 一、当Mutex已存在的时候
static void Main(string[] args)
{
Thread th1 = new Thread(Thread1);
Thread th2 = new Thread(Thread2);
th1.Start();
th2.Start();
Console.ReadKey();
}
public static void Thread1()
{
bool bCreatedNewMutex;
Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex); //如果名为"HAHA"的互斥锁不存在,返回参数bCreatedNewMutex为true,否则为false
if (bCreatedNewMutex) //如果名为“HAHA”的互斥锁不存在
{
Console.WriteLine("th1装逼成功");
}
else
{
Console.WriteLine("th1装逼失败");
}
}
public static void Thread2()
{
bool bCreatedNewMutex;
Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex);
if (bCreatedNewMutex)
{
Console.WriteLine("th2装逼成功");
}
else
{
Console.WriteLine("th2装逼失败");
}
}
二、使用了垃圾回收
static void Main(string[] args)
{
Thread th1 = new Thread(Thread1);
Thread th2 = new Thread(Thread2);
th1.Start();
th2.Start();
Console.ReadKey();
}
public static void Thread1()
{
bool bCreatedNewMutex;
Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex);
if (bCreatedNewMutex)
{
Console.WriteLine("th1装逼成功");
}
else
{
Console.WriteLine("th1装逼失败");
}
}
public static void Thread2()
{
Thread.Sleep(); //作用是等th1执行完毕,否则会报错:由于出现被放弃的 mutex,等待过程结束。
GC.Collect();
GC.WaitForPendingFinalizers();
bool bCreatedNewMutex;
Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex);
m.WaitOne();
if (bCreatedNewMutex)
{
Console.WriteLine("th2装逼成功");
}
else
{
Console.WriteLine("th2装逼失败");
}
m.ReleaseMutex();
}
C# Mutex互斥锁的更多相关文章
- RWLock——一种细粒度的Mutex互斥锁
RWMutex -- 细粒度的读写锁 我们之前有讲过 Mutex 互斥锁.这是在任何时刻下只允许一个 goroutine 执行的串行化的锁.而现在这个 RWMutex 就是在 Mutex 的基础上进行 ...
- golang mutex互斥锁分析
互斥锁:没有读锁写锁之分,同一时刻,只能有一个gorutine获取一把锁 数据结构设计: type Mutex struct { state int32 // 将一个32位整数拆分为 当前阻塞的gor ...
- Go 标准库 —— sync.Mutex 互斥锁
Mutex 是一个互斥锁,可以创建为其他结构体的字段:零值为解锁状态.Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁. 方法 func (*Mutex) Lock func (m *Mut ...
- C# mutex互斥锁构造
概念 Mutext 出现的比monitor更早,而且传承自COM,当然,waitHandle也是它的父类,它继承了其父类的功能,有趣的是Mutex的脾气非常的古怪,它 允许同一个线程多次重复访问共享区 ...
- 【转】【C#】【Thread】Mutex 互斥锁
Mutex:互斥(体) 又称同步基元. 当创建一个应用程序类时,将同时创建一个系统范围内的命名的Mutex对象.这个互斥元在整个操作系统中都是可见的.当已经存在一个同名的互斥元时,构造函数将会输出一个 ...
- 互斥锁Mutex与信号量Semaphore的区别
转自互斥锁Mutex与信号量Semaphore的区别 多线程编程中,常常会遇到这两个概念:Mutex和Semaphore,两者之间区别如下: 有人做过如下类比: Mutex是一把钥匙,一个人拿了就可进 ...
- Golang 读写锁RWMutex 互斥锁Mutex 源码详解
前言 Golang中有两种类型的锁,Mutex (互斥锁)和RWMutex(读写锁)对于这两种锁的使用这里就不多说了,本文主要侧重于从源码的角度分析这两种锁的具体实现. 引子问题 我一般喜欢带着问题去 ...
- 探索互斥锁 Mutex 实现原理
Mutex 互斥锁 概要描述 mutex 是 go 提供的同步原语.用于多个协程之间的同步协作.在大多数底层框架代码中都会用到这个锁. mutex 总过有三个状态 mutexLocked: 表示占有锁 ...
- day 7-4 互斥锁与队列
一. 基本定义 互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个 ...
随机推荐
- 编写html页面时常见的问题(一)
说到写页面,肯定有很多人在刚接触编写页面这一块时遇到很多细节和兼容性的问题,那么在这里我总结一些经常遇到的小问题.希望能够帮助学习页面搭建的初学者! 虽然说ie6很多公司都已经抛弃,但是个人认为,初学 ...
- 数据结构与算法(2)----->字符串
1. 字符串的一些特点 1.1 广泛性 (1)字符串可以看作是字符类型的数组----->所以可能会涉及排序+查找; (2)很多问题都可以转化为字符串类型的方法去解决; 需要注意的是:用java ...
- Vue cli项目开启Gzip
目录 安装 compression-webpack-plugin 更改配置文件 服务器开启gzip功能 安装 compression-webpack-plugin 建议安装v1.1.11版本,最新版本 ...
- bzoj1853幸运数字——容斥原理
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 dfs实现容斥原理即可. 注意:若在init中写“cnt++”,则出来后需要先cnt-- ...
- 洛谷P1220关路灯——区间DP
题目:https://www.luogu.org/problemnew/show/P1220 区间DP. 代码如下: #include<iostream> #include<cstd ...
- python find()用法
案例: ### 1 ### str = "01213456" if str.find("23"): print "YES!" else: p ...
- kindeditor Springmvc 整和解决图片上传问题
1. 在编辑页面引入js <script type="text/javascript" charset="utf-8" src="${baseP ...
- Linux下搭建tomcat集群全记录
(转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...
- Struts result param详细设置
<</span>result type="json"> <</span>param name="root">da ...
- JAVA学习笔记——(三)
今日内容介绍 1.引用类型变量的创建及使用 2.流程控制语句之选择语句 3.流程控制语句之循环语句 4.循环高级 01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scan ...