互斥锁Mutex解锁两次
一般我们都知道互斥锁包含的代码段,同一时间只能被一个线程调用,如果一个线程已经获取到互斥锁,还在代码段中(还未解锁),此时另一个线程执行此段代码时,是获取不到互斥锁的。
那么已经解锁的互斥锁,还能再次被解锁吗?
做测试:
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那样的问题;
互斥锁Mutex解锁两次相关推荐
- 互斥锁(mutex)
原文地址:https://blog.csdn.net/qq_39736982/article/details/82348672 Linux中提供一把互斥锁mutex(也称之为互斥量). 每个线程在对资 ...
- android 线程互斥锁,线程锁(互斥锁Mutex)及递归锁
一.线程锁(互斥锁) 在一个程序内,主进程可以启动很多个线程,这些线程都可以访问主进程的内存空间,在Python中虽然有了GIL,同一时间只有一个线程在运行,可是这些线程的调度都归系统,操作系统有自身 ...
- 互斥锁(mutex)的使用
互斥锁的使用范围: 互斥锁(Mutex)是在原子操作API的基础上实现的信号量行为.互斥锁不能进行递归锁定或解锁,能用于交互上下文但是不能用于中断上下文,同一时间只能有一个任务持有互斥锁,而且只有这个 ...
- 互斥锁Mutex:鸿蒙轻内核中处理临界资源独占的“法官”
摘要:本文带领大家一起剖析鸿蒙轻内核的互斥锁模块的源代码,包含互斥锁的结构体.互斥锁池初始化.互斥锁创建删除.申请释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十 互斥锁Mutex& ...
- 一文带你剖析LiteOS互斥锁Mutex源代码
本文分享自华为云社区<LiteOS内核源码分析系列七 互斥锁Mutex>,原文作者:zhushy. 多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的临界资源,只能 ...
- 互斥锁(mutex lock)
互斥锁 解决临界区最简单的工具就是互斥锁(mutex lock) 一个进程在进入临界区的时候获得锁(函数acquire) 在退出临界区时释放锁(函数release) 每个互斥锁都有一个布尔变量avai ...
- C语言mutex使用案例,C语言 如何使用互斥锁严格交替使用两个线程?
我需要创建两个严格交替的线程.这是我使用的示例代码: #include #include using std::cout; using std::endl; HANDLE g_hMutex1; HAN ...
- 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁
多线程1 线程概念 线程控制 线程创建 线程终止 线程等待 线程分离 线程安全 如何给面试官描述线程不安全的现象? 线程不安全的情况(模拟黄牛抢票) 互斥 互斥锁的原理 互斥锁的接口 静态初始化 动态 ...
- 多线程之互斥锁(mutex)的使用方法
关于读写锁可查看:多线程之读写锁(unique_lock与shared_lock) 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁). 引用 cpprefere ...
最新文章
- 互联网架构为什么要做服务化
- 文本协议与二进制协议
- 在Linux平台上部署open***
- Daily Scrum 11.16
- java_二进制的前导的零
- 程序防止多开的几种常见方法
- html添加js的代码注释,JavaScript 注释方法总结
- 站在潮流前沿,不到100行代码快速实现一个简易版 vite
- No rule to make target
- 拼图游戏怎样切换代码html,HTML5技术之图像处理:一个滑动的拼图游戏-H5教程
- PMBOK6相关方:权利利益方格
- ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-3-01:BootLoader+Application的开发模式
- 搭建Bitbucket项目管理工具详细教程
- 基于GOP的时域滤波
- zemax评价函数编辑器_zemax默认评价函数使用方法
- 阿布扎比欢迎全世界所有已接种疫苗的旅行者,该政策9月5日起生效
- 富友eERP打造服装企业电子商务快鱼时代
- 隐式龙格库塔法举例说明
- 学计算机怎么预防脱发,电脑一族如何预防脱发_39健康网
- 一文看懂PCB助焊层跟阻焊层的区别与作用
热门文章
- 嵌入式Linux应用开发学习(一)—嵌入式编程基本知识
- java实现第七届蓝桥杯四平方和
- 获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区...
- PHP+SQL考勤系统安全性的设计与实现
- Word 插入图片后只剩一点?如何解决
- 高通平台Linux kernel死机解题心得-trace32的使用
- 一个简单的Android破解WIFI密码的方法(实用)
- 斐波拉契数列 java实现
- Codeforces 711c 简单dp
- ai 计算机视觉_人工智能中的计算机视觉