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

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

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解锁两次相关推荐

  1. 互斥锁(mutex)

    原文地址:https://blog.csdn.net/qq_39736982/article/details/82348672 Linux中提供一把互斥锁mutex(也称之为互斥量). 每个线程在对资 ...

  2. android 线程互斥锁,线程锁(互斥锁Mutex)及递归锁

    一.线程锁(互斥锁) 在一个程序内,主进程可以启动很多个线程,这些线程都可以访问主进程的内存空间,在Python中虽然有了GIL,同一时间只有一个线程在运行,可是这些线程的调度都归系统,操作系统有自身 ...

  3. 互斥锁(mutex)的使用

    互斥锁的使用范围: 互斥锁(Mutex)是在原子操作API的基础上实现的信号量行为.互斥锁不能进行递归锁定或解锁,能用于交互上下文但是不能用于中断上下文,同一时间只能有一个任务持有互斥锁,而且只有这个 ...

  4. 互斥锁Mutex:鸿蒙轻内核中处理临界资源独占的“法官”

    摘要:本文带领大家一起剖析鸿蒙轻内核的互斥锁模块的源代码,包含互斥锁的结构体.互斥锁池初始化.互斥锁创建删除.申请释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十 互斥锁Mutex& ...

  5. 一文带你剖析LiteOS互斥锁Mutex源代码

    本文分享自华为云社区<LiteOS内核源码分析系列七 互斥锁Mutex>,原文作者:zhushy. 多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的临界资源,只能 ...

  6. 互斥锁(mutex lock)

    互斥锁 解决临界区最简单的工具就是互斥锁(mutex lock) 一个进程在进入临界区的时候获得锁(函数acquire) 在退出临界区时释放锁(函数release) 每个互斥锁都有一个布尔变量avai ...

  7. C语言mutex使用案例,C语言 如何使用互斥锁严格交替使用两个线程?

    我需要创建两个严格交替的线程.这是我使用的示例代码: #include #include using std::cout; using std::endl; HANDLE g_hMutex1; HAN ...

  8. 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁

    多线程1 线程概念 线程控制 线程创建 线程终止 线程等待 线程分离 线程安全 如何给面试官描述线程不安全的现象? 线程不安全的情况(模拟黄牛抢票) 互斥 互斥锁的原理 互斥锁的接口 静态初始化 动态 ...

  9. 多线程之互斥锁(mutex)的使用方法

    关于读写锁可查看:多线程之读写锁(unique_lock与shared_lock) 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁). 引用 cpprefere ...

最新文章

  1. 互联网架构为什么要做服务化
  2. 文本协议与二进制协议
  3. 在Linux平台上部署open***
  4. Daily Scrum 11.16
  5. java_二进制的前导的零
  6. 程序防止多开的几种常见方法
  7. html添加js的代码注释,JavaScript 注释方法总结
  8. 站在潮流前沿,不到100行代码快速实现一个简易版 vite
  9. No rule to make target
  10. 拼图游戏怎样切换代码html,HTML5技术之图像处理:一个滑动的拼图游戏-H5教程
  11. PMBOK6相关方:权利利益方格
  12. ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-3-01:BootLoader+Application的开发模式
  13. 搭建Bitbucket项目管理工具详细教程
  14. 基于GOP的时域滤波
  15. zemax评价函数编辑器_zemax默认评价函数使用方法
  16. 阿布扎比欢迎全世界所有已接种疫苗的旅行者,该政策9月5日起生效
  17. 富友eERP打造服装企业电子商务快鱼时代
  18. 隐式龙格库塔法举例说明
  19. 学计算机怎么预防脱发,电脑一族如何预防脱发_39健康网
  20. 一文看懂PCB助焊层跟阻焊层的区别与作用

热门文章

  1. 嵌入式Linux应用开发学习(一)—嵌入式编程基本知识
  2. java实现第七届蓝桥杯四平方和
  3. 获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. PHP+SQL考勤系统安全性的设计与实现
  5. Word 插入图片后只剩一点?如何解决
  6. 高通平台Linux kernel死机解题心得-trace32的使用
  7. 一个简单的Android破解WIFI密码的方法(实用)
  8. 斐波拉契数列 java实现
  9. Codeforces 711c 简单dp
  10. ai 计算机视觉_人工智能中的计算机视觉