我是靠谱客的博主 清脆咖啡豆,最近开发中收集的这篇文章主要介绍pthread_mutex_unlock,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部