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互斥锁的更多相关文章

  1. RWLock——一种细粒度的Mutex互斥锁

    RWMutex -- 细粒度的读写锁 我们之前有讲过 Mutex 互斥锁.这是在任何时刻下只允许一个 goroutine 执行的串行化的锁.而现在这个 RWMutex 就是在 Mutex 的基础上进行 ...

  2. golang mutex互斥锁分析

    互斥锁:没有读锁写锁之分,同一时刻,只能有一个gorutine获取一把锁 数据结构设计: type Mutex struct { state int32 // 将一个32位整数拆分为 当前阻塞的gor ...

  3. Go 标准库 —— sync.Mutex 互斥锁

    Mutex 是一个互斥锁,可以创建为其他结构体的字段:零值为解锁状态.Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁. 方法 func (*Mutex) Lock func (m *Mut ...

  4. C# mutex互斥锁构造

    概念 Mutext 出现的比monitor更早,而且传承自COM,当然,waitHandle也是它的父类,它继承了其父类的功能,有趣的是Mutex的脾气非常的古怪,它 允许同一个线程多次重复访问共享区 ...

  5. 【转】【C#】【Thread】Mutex 互斥锁

    Mutex:互斥(体) 又称同步基元. 当创建一个应用程序类时,将同时创建一个系统范围内的命名的Mutex对象.这个互斥元在整个操作系统中都是可见的.当已经存在一个同名的互斥元时,构造函数将会输出一个 ...

  6. 互斥锁Mutex与信号量Semaphore的区别

    转自互斥锁Mutex与信号量Semaphore的区别 多线程编程中,常常会遇到这两个概念:Mutex和Semaphore,两者之间区别如下: 有人做过如下类比: Mutex是一把钥匙,一个人拿了就可进 ...

  7. Golang 读写锁RWMutex 互斥锁Mutex 源码详解

    前言 Golang中有两种类型的锁,Mutex (互斥锁)和RWMutex(读写锁)对于这两种锁的使用这里就不多说了,本文主要侧重于从源码的角度分析这两种锁的具体实现. 引子问题 我一般喜欢带着问题去 ...

  8. 探索互斥锁 Mutex 实现原理

    Mutex 互斥锁 概要描述 mutex 是 go 提供的同步原语.用于多个协程之间的同步协作.在大多数底层框架代码中都会用到这个锁. mutex 总过有三个状态 mutexLocked: 表示占有锁 ...

  9. day 7-4 互斥锁与队列

    一. 基本定义 互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个 ...

随机推荐

  1. codeforces 658C C. Bear and Forgotten Tree 3(tree+乱搞)

    题目链接: C. Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes ...

  2. 一:AMQP协议标准简单介绍

    一:AMQP协议?--->AMQP 是 Advanced Message Queuing Protocol,即高级消息队列协议.和前面罗列的技术不同,AMQP 是一个标准化的消息中间件协议--- ...

  3. javacpp-FFmpeg系列补充:FFmpeg拉流截图实现在线演示demo(视频截图并返回base64图像,支持jpg/png/gif/bmp等多种格式)

    javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...

  4. poj1325机器工作——二分图最小点覆盖

    题目:http://poj.org/problem?id=1325 二分图求最大匹配,即为最小点覆盖: 一开始我写得较麻烦,求出最大匹配又去搜增广路,打标记求最小点覆盖: 然而两种方法都没写“ans= ...

  5. Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态

    ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...

  6. bzoj3629

    dfs 跟上道题很像有木有 同样地,我们暴力枚举约数 根据约数和公式,得出$S=\prod_{i=1}^{n}{(1+p+p^{2}+...+p^{a_{i}})}$ 所以每次我们暴力枚举是哪个约数, ...

  7. MFC获取数据的方式

    假设输入框ID是:ID_NUMBER1,ID_NUMBER2,ID_NUMBER3. 获取数据的方式是: int number1,number2,number3; number1 = GetDlgIt ...

  8. SRAM SROM DRAM DROM DDR NAND FLASH EMMC的区别

    RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的移动存储,用来存储和保存数据的.它在任何 时候都可以读写,RAM通常是作为操作系统或其他正在运行程序的临时存 ...

  9. C#父窗体右击事件实现

    之前在博问上提问过,没人回答啊,豆太少没人权? 没注册钩子的话根本没办法弹出右键菜单啊,因为在父窗体内有一个容器,所以鼠标在右击时是无法触发窗体的mousedown事件的,即使把KeyPreview设 ...

  10. Teams Formation

    题意: 给定一长度为 n 的整数序列 $a$,将其复制m次,并接成一条链,每相邻K个相同的整数会消除,然后其他的整数继续结成一条链,直到不能消除为止,求问最终剩余多少个整数. 解法: 首先将长度为n的 ...