互斥锁(Mutex)
更多资料下载,冲击月薪过万,一线经验工程师录制,
干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com
核心原理
互斥锁是一种睡眠锁,当线程获取锁失败时,会放弃 CPU 并进入睡眠状态,直到锁被释放后被唤醒。适用于临界区执行时间较长的场景,避免 CPU 空转。关键特性
睡眠锁:持有期间允许抢占,获取失败时进程进入 TASK_UNINTERRUPTIBLE 状态。
严格互斥:同一时刻只能有一个线程持有锁,支持递归(需显式配置 MUTEX_FLAG_RECURSIVE)。
适用场景:进程上下文(可以睡眠的场景)、临界区代码长、单 CPU/SMP 均适用。
限制:不能在中断上下文使用(中断上下文不能睡眠)。核心接口
#include <linux/mutex.h>
// 定义并初始化互斥锁
struct mutex lock;
mutex_init(&lock);
// 获取锁(睡眠等待)
mutex_lock(&lock);
// 非阻塞获取锁,失败返回-EBUSY
int mutex_trylock(&lock);
// 释放锁
mutex_unlock(&lock);
驱动开发核心理论,Linux内核开发入门实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程