news 2026/4/30 8:56:31

详细介绍互斥锁

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
详细介绍互斥锁

互斥锁(Mutex,全称Mutual Exclusion)是多线程同步的基础机制,核心作用是保证同一时间只有一个线程能进入临界区,避免共享资源的并发读写冲突,是解决数据竞争问题的核心工具。

一、核心作用

通过“加锁-解锁”的原子操作,实现临界区的互斥访问

  • 临界区:访问共享资源(如全局变量、共享内存)的代码段;
  • 互斥性:一个线程持有锁时,其他线程尝试加锁会被阻塞,直到锁被释放。
二、关键特性
  1. 原子性:加锁( lock )和解锁( unlock )操作是不可分割的,不会被线程调度器打断;
  2. 唯一性:同一时间只有一个线程能持有锁;
  3. 阻塞性:未获取到锁的线程会进入阻塞状态(而非轮询),降低CPU资源消耗;
  4. 可重入性(部分互斥锁):支持同一线程多次加锁(需对应次数解锁),避免“线程自己锁死自己”。
三、POSIX互斥锁(C语言)的核心函数

以 pthread_mutex_t 为例(Linux下常用):

函数功能
pthread_mutex_init初始化互斥锁,参数指定锁的属性(如是否可重入、进程间共享)
pthread_mutex_lock尝试获取锁:
- 锁空闲:立即获取并返回;
- 锁被占用:阻塞当前线程,直到锁被释放
pthread_mutex_trylock尝试获取锁:
- 锁空闲:获取并返回0;
- 锁被占用:直接返回错误(不阻塞)
pthread_mutex_unlock释放锁:
- 唤醒一个阻塞在该锁上的线程;
- 仅能由持有锁的线程调用
pthread_mutex_destroy销毁互斥锁,释放资源(需确保锁已被释放)
四、典型使用流程(保护共享变量)
#include<pthread.h>#include<stdio.h>pthread_mutex_tmutex;// 互斥锁intshared_var=0;// 共享变量void*thread_func(void*arg){for(inti=0;i<10000;i++){// 加锁:进入临界区pthread_mutex_lock(&mutex);shared_var++;// 操作共享变量// 解锁:离开临界区pthread_mutex_unlock(&mutex);}returnNULL;}intmain(){pthread_mutex_init(&mutex,NULL);// 初始化锁pthread_tt1,t2;pthread_create(&t1,NULL,thread_func,NULL);pthread_create(&t2,NULL,thread_func,NULL);pthread_join(t1,NULL);pthread_join(t2,NULL);printf("shared_var最终值:%d\n",shared_var);// 正确输出20000(无锁时可能小于20000)pthread_mutex_destroy(&mutex);// 销毁锁return0;}
五、常见互斥锁类型(按属性)
锁类型特点
普通锁(默认)不可重入,同一线程多次加锁会死锁。
可重入锁同一线程可多次加锁,需对应次数解锁;适合递归/嵌套场景。
进程间共享锁锁存储在共享内存中,支持跨进程线程互斥;默认仅限同进程。

互斥锁和条件变量通常配合使用

  • 互斥锁:保护共享资源的读写;
  • 条件变量:实现线程的等待-通知逻辑;
  • 例如生产者-消费者模型中,互斥锁保护队列的读写,条件变量让消费者等待“队列非空”、生产者等待“队列不满”。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 4:36:55

电商返利系统中佣金计算的幂等性保障与对账补偿机制实现

电商返利系统中佣金计算的幂等性保障与对账补偿机制实现 大家好&#xff0c;我是 微赚淘客系统3.0 的研发者省赚客&#xff01; 在微赚淘客系统3.0中&#xff0c;用户通过专属推广链接下单后&#xff0c;平台需从电商平台&#xff08;如淘宝联盟、京东联盟&#xff09;获取订…

作者头像 李华
网站建设 2026/4/23 16:00:44

基于PLC的温室远程监控系统,西门子s71200(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于PLC的温室远程监控系统&#xff0c;西门子s71200(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码基于PLC的温室远程监控系统&#xff0c;西门子。s71200,含程序、报基于PLC的温室远程监控系统&#xff0c;西门子s71200&…

作者头像 李华
网站建设 2026/4/21 15:54:12

AI开发-python-langchain框架(1-7 提示词-模板中的模板)

本案例通过精心设计的提示模板&#xff0c;将历史对话内容与用户指令有机组合&#xff0c;引导模型生成精准的对话摘要。这种设计模拟了真实对话场景&#xff1a;模型既能回顾之前的交流内容&#xff0c;又能理解当前提出的总结要求&#xff0c;从而输出符合预期的结果。 消息模…

作者头像 李华
网站建设 2026/4/23 19:01:30

【Android毕设源码分享】基于微信小程序的古代天文知识科普系统设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/27 14:32:42

xilinx-DNA

一、Device DNA 具体含义 Device DNA​ 是 AMD Xilinx 现场可编程门阵列 和自适应计算加速平台 芯片中一项至关重要的硅片级安全与识别特性。 您可以将其理解为芯片的 “硅片指纹”​ 或 “不可克隆的硬件序列号”。 本质&#xff1a;一个在芯片生产测试阶段被永久性熔断&…

作者头像 李华