Mutex、Semaphore、Monitor / Lock的使用和区别

本文详细介绍了Mutex、Semaphore在进程和线程同步中的应用,包括Mutex用于确保进程间唯一性,Semaphore限制同时访问资源的线程数量。还提及了Monitor/Lock对象同步机制以及EventWaitHandle事件同步方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:Mutex,线程或进程间同步

(1)进程同步

 static bool IsCreated = false;
 Mutex mm = new Mutex(true, "aaa", out IsCreated);

(1)true:直接为正在执行这句话的线程使用这个互斥锁。相当于在该线程使用了WaitOne()
(2)out IsCreated输出指示名为"aaa"的锁是否是第一次创建,如果是第一次创建返回True,不是第一次返回False,用这个特性可以进程间同步,只允许启动一个进程。

  if (IsCreated == false)    
            {
   
                MessageBox.Show("已经打开了一个程序");
                return;
            }

//这样放在主程序里调用就保证不会同时启动2个程序, 因为Mutex作用于全局操作系统,因此可实现进程间同步

(2)线程同步
//MUTEX: 某线程占用锁用WaitOne() ,释放锁用ReleaseMutex()
//使用案例:

       //【1】先把锁给主线程,使其占用该锁
        //【2】在要阻止的子线程中使用WaitOne()以预定该子线程使用锁,此时因为主线程已使用该锁,因此子线程因为没有锁会再WaitOne()这句话阻塞
        //【3】在主线程中使用ReleaseMutex()释放锁,此时子线程得到锁开始执行。当子线程执行完后也使用ReleaseMutex()释放锁以便下次使用
        //【4】再在主线程中调用WaitOne()方法以使主线程再次占用该锁。   
static bool IsCreated = false;
 Mutex mm = new Mutex(true, "aaa", out IsCreated);  //主线程中调用以占用锁
 public void AFunc()  //一个可供任意线程调用的方法
        {
   
  			mm.WaitOne()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stephon_100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值