网站首页 > 技术文章 正文
功能:
用于线程同步操作的类,保护临界区(Critical Section)代码,例如,当多个线程同时访问一个资源时保证一次只能有一个线程访问资源。
特征:
1,互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它
2.互斥锁可适用于一个共享资源每次只能被一个线程访问的情况
3.如果要获取一个互斥锁。应调用互斥锁上的WaitOne()方法,该方法继承于Thread.WaitHandle类,它处于等待状态直至所调用互斥锁可以被获取,因此该方法将阻止住主调线程直到指定的互斥锁可用,如果不需要拥有互斥锁,用ReleaseMutex方法释放,从而使互斥锁可以被另外一个线程所获取。
语法:Mutex (bool initiallyOwned, string name, out bool createdNew);
@param initiallyOwned.一个指示调用线程是否应拥有互斥锁的初始所属权的布尔值
@param name.一个作为互斥锁名称的字符串
@param createdNew.一个在方法返回时指示调用线程是否被授予互斥体的初始所属权的布尔值来初始化 Mutex类的新实例
eg1:声明一个主线程拥有互斥锁的初始所属权,如果不执行释放代码,那么t1线程始终不能获取到锁,程序死等
static void Main(string[] args)
{
Thread.CurrentThread.Name = "Main";
const string MutexName = "Mutex-Test";
var m = new Mutex(true, MutexName);
print("执行代码逻辑...");
//m.ReleaseMutex();
Thread t1 = new Thread(() =>
{
print("执行代码逻辑...");
m.WaitOne();
print("获得了Mutex锁");
m.ReleaseMutex();
});
t1.Name = "t1";
t1.Start();
t1.Join();
wait();
}
运行效果:
如果放开主线程执行释放锁代码,运行效果:
WaitOne()和ReleaseMutex()获取和释放是一对难兄难弟,必须匹配出现,否则程序死等
github代码:https://github.com/LiangZhang/MultiThread-csharp-Toutiao.git
猜你喜欢
- 2024-10-12 漫画 | Linux 并发和竞态问题究竟是什么?
- 2024-10-12 【驱动】串口驱动分析(三)-serial driver
- 2024-10-12 synchronized锁 synchronized锁的是类还是对象
- 2024-10-12 Golang 程序遇到性能问题该怎么办?
- 2024-10-12 线程间通信——互斥锁 线程间互斥方式
- 2024-10-12 【Linux系统编程】互斥锁 linux 互斥锁优先级反转
- 2024-10-12 linux c/c++开发:多线程并发锁:互斥锁、自旋锁、原子操作、CAS
- 2024-10-12 每行代码都带注释,带你看懂Go互斥锁的源码
- 2024-10-12 一文搞懂pprof 一文搞懂伤寒论六经辨证
- 2024-10-12 并发原理系列八:信号量、互斥锁、自旋锁
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)