Linux -- 互斥锁

互斥锁

互斥锁核心概念

互斥锁(Mutex) :用于多线程之间对共享资源 的互斥访问,保证同一时刻只有一个线程能进入临界区执行。

  • 作用:解决线程并发时的数据混乱、覆盖、计算错误

  • 本质:一把二值锁(0/1)

  • 原则:同一时间只允许一个线程持有锁

互斥锁四大函数

头文件:

复制代码
#include <pthread.h>
1. 初始化互斥锁
复制代码
int pthread_mutex_init(pthread_mutex_t *mutex, 
                       const pthread_mutexattr_t *attr);
  • mutex:互斥锁变量地址

  • attr:属性,一般填 NULL

  • 返回:成功 0,失败非 0

2. 加锁(阻塞)
复制代码
int pthread_mutex_lock(pthread_mutex_t *mutex);
  • 能拿到锁:直接上锁,继续执行

  • 拿不到锁:阻塞等待,直到锁被释放

3. 解锁
复制代码
int pthread_mutex_unlock(pthread_mutex_t *mutex);
  • 释放锁,唤醒等待该锁的线程
4. 销毁锁
复制代码
int pthread_mutex_destroy(pthread_mutex_t *mutex);
  • 用完锁必须销毁,释放资源

使用流程(固定模板)

  1. 定义全局互斥锁:pthread_mutex_t mutex;

  2. 初始化:pthread_mutex_init(&mutex, NULL);

  3. 访问共享资源前:lock

  4. 访问完共享资源:unlock

  5. 最后销毁:pthread_mutex_destroy(&mutex);

考点(⭐)

  1. 互斥锁保证临界区同一时间只有一个线程执行

  2. 加锁必须成对出现:lock ↔ unlock

  3. 忘记解锁 → 死锁,程序卡死

  4. 锁的粒度越小,并发效率越高

  5. 只锁共享资源,不锁无关代码

  6. 互斥锁属于线程级,不能用于进程间

互斥锁 = 线程安全的通行证

谁拿到锁谁执行临界区,没拿到就阻塞等待,保证数据不乱。

相关推荐
GeW22 分钟前
高端化转型进入“补底层”阶段:Linux与数据库的再定位
linux
silent43 分钟前
龙芯3B6000M运行Yolov8+FastApi
linux·loongarch·loongnix·龙芯
西西弗Sisyphus2 小时前
理解 Linux 动态库加载:LD_LIBRARY_PATH
linux
AR-26710-2 小时前
Linux Day31——实操启停服务改端口重启
linux·运维
叼烟扛炮2 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮2 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
星恒随风3 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣4 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
Oiiouui6 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端
ITKEY_6 小时前
用 Emacs Dired 实现 em:退出文件管理器后,让终端自动切换目录
linux·服务器·emacs