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

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

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

相关推荐
treacle田20 分钟前
达梦数据库-Linux DM主备集群动态增加节点-记录总结
linux·运维·数据库·达梦主备集群动态扩展
ARM|X86+FPGA工业主板厂家34 分钟前
基于Jetson TX2的矿用巡检机器人
linux·运维·机器人
杨云龙UP42 分钟前
Oracle 19c RMAN历史备份清理失败:CONTROL_FILE_RECORD_KEEP_TIME 问题排查与整改实战
linux·运维·网络·数据库·oracle·rac
Alphapeople1 小时前
moveit真机部署
linux·运维·服务器
Eminem891 小时前
2、k8s环境规划
linux·运维·kubernetes
打团从来人不齐2 小时前
Linux服务器搭建笔记-008:台式机共享WIFI
linux·服务器·笔记
w200512242 小时前
K8S控制器管理
linux·云原生·容器·kubernetes
Dream Cosmos2 小时前
Linux 多线程——线程互斥:从抢票问题到 Mutex 底层原理
linux·c++
玖石书3 小时前
Ubuntu 更换 USTC 镜像源完整指南(AMD64 / AARCH64)
linux·运维·ubuntu
zbyyd3 小时前
Linux 进程间通信(IPC):信号、消息队列、共享内存与信号量详解
linux·运维·c语言