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

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

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

相关推荐
未济1 天前
linux 配置环境变量
linux
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
_艾伦 耶格尔.1 天前
进程间通信
linux
Liuqy-051 天前
Linux IO编程——静态库、动态库
linux
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅1 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK1 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid
琥珀色糖1 天前
SimlpeHttp
linux·服务器
qeen871 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
Zenova EdgeOS1 天前
Linux ss 工业边缘网络分析实战
linux·python·边缘计算·工业网关