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

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

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

相关推荐
2401_834636992 分钟前
Linux集群技术-高可用与负载均衡实战解析
linux·运维·负载均衡
吠品3 分钟前
处理 Python 类继承中那些变来变去的初始化参数
linux·前端·python
帅大大的架构之路12 分钟前
linux上面的一些小知识点
linux·运维·服务器
光电笑映17 分钟前
进程间通信:深入 System V IPC:共享内存、消息队列与信号量
linux·运维·服务器·c++
RisunJan17 分钟前
Linux命令-patch (为开放源代码软件安装补丁程序)
linux·服务器·算法
皆圥忈30 分钟前
_Linux文件系统与磁盘结构深度解析
linux
向日葵.33 分钟前
linux & qnx & git 命令 2
linux·运维·git
丑过三八线33 分钟前
Systemd Cgroup 驱动详解
linux·ubuntu·容器
‎ദ്ദിᵔ.˛.ᵔ₎34 分钟前
linux的vim编辑器
linux
用户8055336980343 分钟前
嵌入式Linux开发——烧写你的镜像:存储介质基础 - 先分清 SD、eMMC 和块设备
linux·嵌入式