概述
一般我们都知道互斥锁包含的代码段,同一时间只能被一个线程调用,如果一个线程已经获取到互斥锁,还在代码段中(还未解锁),此时另一个线程执行此段代码时,是获取不到互斥锁的。
那么已经解锁的互斥锁,还能再次被解锁吗?
做测试:
static void MutexTest(void)
{
printf("互斥锁解锁两次测试rn");
MutexLock(&mutex);
printf("互斥锁加锁rn");
MutexUnLock(&mutex);
printf("第一次解锁成功rn");
MutexUnLock(&mutex);
printf("第二次解锁成功rn");
}
测试结果:
互斥锁解锁两次测试
互斥锁加锁
第一次解锁成功
Error: Mutex unlock failed, The current thread does not own the mutex
第二次解锁成功
可以看到第二次解锁的时候,解锁失败,但是它并不会像加锁那样,连续操作两次就卡住;
回归到互斥锁的本质:
1.如果是Linux系统:互斥锁是由信号量实现的,连续两次解锁,当然不会卡住;但是如果此时有另外一个线程也在等待互斥锁,那当你第二次解锁的时候,另外一个线程也将进入代码段,这是不被允许的;
2.如果是小系统:互斥锁可能是由某个全局变量实现,加锁解锁其实就是对变量的+1或-1,同样也会有Linux那样的问题;
(759条消息) 互斥锁Mutex解锁两次_水心123的博客-CSDN博客_互斥锁可以锁两次吗
最后
以上就是清脆咖啡豆为你收集整理的pthread_mutex_unlock的全部内容,希望文章能够帮你解决pthread_mutex_unlock所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复