互斥锁(Mutex)

更多资料下载,冲击月薪过万,一线经验工程师录制, 干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com
  1. 核心原理
    互斥锁是一种睡眠锁,当线程获取锁失败时,会放弃 CPU 并进入睡眠状态,直到锁被释放后被唤醒。适用于临界区执行时间较长的场景,避免 CPU 空转。

  2. 关键特性
    睡眠锁:持有期间允许抢占,获取失败时进程进入 TASK_UNINTERRUPTIBLE 状态。
    严格互斥:同一时刻只能有一个线程持有锁,支持递归(需显式配置 MUTEX_FLAG_RECURSIVE)。
    适用场景:进程上下文(可以睡眠的场景)、临界区代码长、单 CPU/SMP 均适用。
    限制:不能在中断上下文使用(中断上下文不能睡眠)。

  3. 核心接口

#include <linux/mutex.h>

// 定义并初始化互斥锁
struct mutex lock;
mutex_init(&lock);

// 获取锁(睡眠等待)
mutex_lock(&lock);
// 非阻塞获取锁,失败返回-EBUSY
int mutex_trylock(&lock);
// 释放锁
mutex_unlock(&lock);
驱动开发核心理论,Linux内核开发入门实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程