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)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个 ...
随机推荐
- codeforces 706C C. Hard problem(dp)
题目链接: C. Hard problem time limit per test 1 second memory limit per test 256 megabytes input standar ...
- codeforces 609D D. Gadgets for dollars and pounds(二分+贪心)
题目链接: D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 mega ...
- android自定义控件(三) 增加内容 自定义属性 format详解
转自 http://www.gisall.com/html/35/160435-5369.html 1. reference:参考某一资源ID. (1)属性定义: <declare-stylea ...
- PS 滤镜— — 万花筒效果
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...
- cm 安装
为Cloudera Manager建立数据库:/usr/share/cmf/schema/scm_prepare_database.sh mysql -h[mysql数据库的主机名] -P63751 ...
- Codeforces 755B. PolandBall and Game 贪心
题目大意: 有两个人轮流说单词,已经说过的单词不能再说.给出两人掌握的不同的单词,两人可能掌握相同的单词,但是这个单词也只能说一边.问在两人都是最优策略下先手是否必胜. 题解: 我们发现最优策略一定是 ...
- struts2的使用知识点
最开始学习java的时候学习过struts,但是对配置和struts的理解深度不够,现在工作虽然再用,但是自己搭建环境和使用心得始终很零散,所以现在决定重新理一遍,有条理的学习一下struts. 至于 ...
- XCode工程中 Project 和 Targets区别
转自:http://blog.csdn.net/zhaozy55555/article/details/8557175 project就是一个项目,或者说工程,一个project可以对应多个targe ...
- 【opencv学习笔记四】opencv3.4.0图形用户接口highgui函数解析
在笔记二中我们已经知道了,在highgui文件夹下的正是opencv图形用户接口功能结构,我们这篇博客所说的便是D:\Program Files\opencv340\opencv\build\incl ...
- Oracle数据去重
一.完全重复数据去重方法 具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表. 对于表中完全重 ...