Linux记录过程

线程同步

Linux 线程:互斥锁 + 条件变量 必须搭配使用的核心原因

条件变量本身不具备 "保护共享资源" 的能力,它只负责 "等待 + 唤醒";互斥锁负责 "保护共享资源",两者缺一不可。

1. 先明确两个东西的本职工作

互斥锁(mutex)

作用:保护共享数据,防止多个线程同时修改 / 读取,避免数据混乱。

  • 上锁:我在用,别人不许碰
  • 解锁:我用完了,别人可以用
  • 只解决 "并发访问冲突",不解决 "等待条件满足"

条件变量(cond)

作用:让线程 "休眠等待",直到某个条件满足后被唤醒。

  • 等待:条件不满足,我先睡
  • 唤醒:条件满足了,喊醒等待的线程
  • 只解决 "等待 / 通知",完全不保护共享数据
bash 复制代码
// 固定用法!
pthread_cond_wait(&cond, &mutex);

这个函数内部做了三件不可分割的事

  1. 解锁互斥锁(让其他线程能修改共享条件)
  2. 让当前线程休眠等待
  3. 被唤醒后,自动重新加锁(保证醒来后安全访问共享资源)

为什么要解锁? 如果不解锁,线程抱着锁睡觉,其他线程根本无法修改条件(比如往队列放数据),程序直接死锁

  1. 标准固定用法(背下来,永远不会错)
cpp 复制代码
// 线程里的固定模板
pthread_mutex_lock(&mutex);       // 1. 先上锁

// 2. 循环判断条件(必须用while,不能用if)
while (条件不满足) {
    pthread_cond_wait(&cond, &mutex); // 3. 等待(内部解锁+休眠+唤醒后重新上锁)
}

// 4. 条件满足,操作共享资源
do_something();

pthread_mutex_unlock(&mutex);     // 5. 最后解锁
相关推荐
光电的一只菜鸡11 小时前
shell脚本开发技巧
开发语言·ios·swift
丘山望岳11 小时前
藤萝垂序——二叉搜索树
开发语言·数据结构·c++
Face11 小时前
WSL2 初始使用
linux·windows
晨晖211 小时前
Linux命令10
linux·运维·服务器
光电笑映12 小时前
深入理解 ELF:从目标文件到程序加载的全过程
linux·运维·服务器·c++
惊鸿一博12 小时前
统计_滚动标准差:局部波动性衡量
开发语言·python
AI行业学习12 小时前
CC-Switch 下载、安装与使用全指南Windows+macOS+Linux【2026.5.28】
linux·windows·macos
这个DBA有点耶12 小时前
数据库管理工具+开发工具的融合:AI如何重塑DBA工作流?
开发语言·数据库·人工智能·sql·云计算·dba
lynnlovemin12 小时前
【信息学竞赛专题】滑动窗口(尺取法)超全详解|C++模板+经典例题+避坑指南
开发语言·c++·算法·滑动窗口·信息学竞赛
SWAGGY..12 小时前
Linux系统编程:(十)进程概念
linux