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)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个 ...
随机推荐
- 初识Spacy
之所以想接触Spacy,是看到其自称为工业级的应用,所以想尝试下 windows下安装Spacy: 直接安装pip install spacy是会报错的 解决方法: 到 htt ...
- MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
虽然已经使用MySQL5.6版本有一段时间了,但由于没有和之前的版本作过详细比较,所以对于哪些重要的或者不太重要的特性是在新版本中引入的,还有哪些特性已经或者将要从旧版本中移除的并没有一个十分全面的了 ...
- XCode工程中 Project 和 Targets区别
转自:http://blog.csdn.net/zhaozy55555/article/details/8557175 project就是一个项目,或者说工程,一个project可以对应多个targe ...
- sql中内联 和外联 区别
sql中内联 和外联 区别 2007-05-15 17:37 这个概念一般看书不好理解.其实夜简单.有例子就简单了. 比如: 表A(主表) cardid username 16 aa 23 bb 25 ...
- day9http协议
Http协议入门 2.1 什么是http协议 http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范 2.2 查看http协议的工具 1)使用火狐的firebug插件(右键->f ...
- 利用css制作横向和纵向时间轴
Html代码: <div class="container"> <p>原文地址:http://www.cnblogs.com/xiaofeixiang/&l ...
- 使用MeshLab的技巧总结(自己原创总结)
1.放大点的显示,Alt+wheel,即按住Alt键后使用鼠标滑轮改变点的显示大小.
- Java负数的位运算
/** * 求负数的位运算 *///1. -10 >> 2 = ?//2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位 ...
- EntityFramework 中的链接研究初探
很多人用EF的默认链接工厂:System.Data.Entity.Infrastructure.LocalDbConnectionFactory 然后我一开始就不习惯,然后研究了一下,截图如下 然后就 ...
- 731. My Calendar II
Implement a MyCalendarTwo class to store your events. A new event can be added if adding the event w ...