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. 互斥锁属于线程级,不能用于进程间

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

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

相关推荐
tntxia16 小时前
linux curl命令详解_curl详解
linux
扛枪的书生18 小时前
Linux 网络管理器用法速查
linux
顺风尿一寸21 小时前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode1 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫1 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao3 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐4 天前
Linux内存扩容指南
linux
zylyehuo5 天前
Linux 彻底且安全地删除文件
linux
用户805533698035 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297915 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux