互斥锁Mutex解锁两次

259 篇文章 8 订阅

一般我们都知道互斥锁包含的代码段,同一时间只能被一个线程调用,如果一个线程已经获取到互斥锁,还在代码段中(还未解锁),此时另一个线程执行此段代码时,是获取不到互斥锁的。

那么已经解锁的互斥锁,还能再次被解锁吗?
做测试:

static void MutexTest(void)
{
	printf("互斥锁解锁两次测试\r\n");
	
	MutexLock(&mutex);
	printf("互斥锁加锁\r\n");
	
	MutexUnLock(&mutex);
	printf("第一次解锁成功\r\n");

	MutexUnLock(&mutex);
	printf("第二次解锁成功\r\n");
}

测试结果:

互斥锁解锁两次测试
互斥锁加锁
第一次解锁成功
Error: Mutex unlock failed, The current thread does not own the mutex
第二次解锁成功

可以看到第二次解锁的时候,解锁失败,但是它并不会像加锁那样,连续操作两次就卡住;

回归到互斥锁的本质:
1.如果是Linux系统:互斥锁是由信号量实现的,连续两次解锁,当然不会卡住;但是如果此时有另外一个线程也在等待互斥锁,那当你第二次解锁的时候,另外一个线程也将进入代码段,这是不被允许的;

2.如果是小系统:互斥锁可能是由某个全局变量实现,加锁解锁其实就是对变量的+1或-1,同样也会有Linux那样的问题;

(759条消息) 互斥锁Mutex解锁两次_水心123的博客-CSDN博客_互斥锁可以锁两次吗

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值