当前位置: 首页 > news >正文

Linux 多线程编程:互斥锁 (Mutex) —— 给共享资源加上“安全锁” - 详解

各类资料学习下载合集
链接:https://pan.quark.cn/s/7c8c391011eb

在上一篇博客中,我们见识了多线程“裸奔”(无同步机制)时导致的银行账户错误和打印乱码。为了解决这些问题,我们需要引入一种机制,保证同一时刻只有一个线程能访问共享资源。

这个机制就是互斥量(Mutex)。你可以把它想象成洗手间门上的锁:“有人占用,闲人免进”


一、 互斥锁的“使用说明书”

互斥锁本质上是一个结构体 pthread_mutex_t,但在逻辑上,我们可以把它看作一个初值为 1 的整数:

  • 1 (Unlocked):锁是空闲的,可以进。
  • 0 (Locked):锁被占用了,必须排队等待。

核心函数五件套

所有函数成功都返回 0,失败返回错误号。

  1. 定义锁pthread_mutex_t mutex; (通常定义为全局变量)
  2. 初始化pthread_mutex_init(&mutex, NULL);
  3. 加锁 (阻塞)pthread_mutex_lock(&mutex);
    • 若是锁可用 (1),减 1 变为 0,线程继续执行。
    • 若是锁被占 (0),线程阻塞(挂起睡觉),直到锁被释放。
  4. 解锁pthread_mutex_unlock(&mutex);
    • 将锁的值加 1 变为 1,并唤醒阻塞在该锁上的线程。
  5. 销毁pthread_mutex_destroy(&mutex);

二、 代码实战:拯救“打印乱码”

我们重写之前的“打印机”案例,这次加上互斥锁,确保 HELLO 和 world 能够完整输出,互不打断。

1. 代码示例 (mutex_print_fix.c)

#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>// 1. 定义全局互斥锁pthread_mutex_t mutex;void printer(const char *str) {// 3. 进入临界区前加锁// 拿到锁后,其他线程如果也想调 printer,就会卡在这一行等待pthread_mutex_lock(&mutex);while (*str != '\0') {putchar(*str);fflush(stdout);usleep(1000); // 即使在这里放弃CPU,因为持有锁,其他线程也进不来str++;}printf("\n");// 4. 离开临界区后解锁pthread_mutex_unlock(&mutex)
http://www.jsqmd.com/news/325209/

相关文章:

  • 聊聊好用的聚氨酯结构胶,这些结构胶品牌商值得关注
  • 极简云端文件格式转换工具:安全高效的在线数据处理助手
  • 数据结构==B-树== - 教程
  • 联友邦精密机械的滑轨成型机好用吗,有哪些品牌优势?
  • 2026年钉钉服务商联系电话推荐:覆盖多区域服务网络
  • 基于SSM的文档管理系统的设计与实现任务书
  • AI事件检测系统:让机器学会“读懂”异常
  • 2026全国不锈钢型材优质厂家盘点+选型指南,采购避坑
  • 计算机毕设java制造业企业专件全生命周期管理系统 基于Java的制造业零部件全生命周期管理系统设计与实现 Java技术驱动的制造业专件生命周期管理平台开发
  • PNG 转 WebP 教程:免费在线实现高效图片优化
  • 基于SSM的文档管理系统的设计与实现开题报告
  • 计算机毕设java制氢领域文献管理系统 基于Java的制氢领域文献管理平台设计与实现 Java环境下制氢领域文献信息管理系统开发
  • 三合一全自动SEO外链生成器|多线程批量发链工具|全平台搜索引擎适配外链软件
  • 基于SprintBoot和Vue的农家乐系统开题报告
  • Go有没有反射的一些框架
  • Firecracker:轻量级虚拟化技术赋能无服务器计算
  • 商业股权设计方案:打造“与人类共存亡”的永续型企业
  • 实用指南:Flutter Android Kotlin 插件编译错误完整解决方案
  • 机器学习算法中,如何正确选择参数模型?
  • 查看android 设备是否支持WEP?
  • AI写论文不愁没思路!这4款AI论文生成神器,为你打开创作大门!
  • 聊聊长沙靠谱的新风系统供应商,口碑好的有哪些
  • 水凝胶摩擦影响热膨胀
  • 深圳地区GEO厂家怎么选,哪家性价比高且口碑好
  • AI写论文有诀窍!4款实用AI论文生成工具,帮你快速产出高质量论文!
  • 共话天津充电桩安装可靠组织,费用怎么算排名
  • Claude Code:Ubuntu设置中转
  • 基于springboot的在线考试管理系统设计实现
  • 2026年GEO制造企业年度排名,哪家性价比高?
  • 盘点广东电泳漆制造商,飞扬环保科技性价比值得推荐