Linux 内核的锁机制

本文介绍了Linux内核的锁机制,重点讲解了互斥锁和自旋锁。互斥锁通过将线程放入等待链表实现资源的互斥访问,而自旋锁则在获取锁的过程中不断循环,适用于能快速获取锁的情况。两者在使用场景和性能上有显著区别。
摘要由CSDN通过智能技术生成

概要:

锁机制是一种保护共享资源不被多次访问的一种机制。共享资源可以是数据(如:全局变量)也可以是设备(如:GPIO)。

Linux锁的种类:

●互斥锁

●自旋锁

●信号量

本文只对前两种锁进行说明。

互斥锁:

顾名思义,对资源的访问是互斥的。例如:一个线程访问了(lock)一种资源,那么其他线程就不能访问,直到锁被释放(unlock)。

原理:

竞争线程从调度器的运行队列中移出,放入处于睡眠状态的等待链表中。然后内核调度并执行其他任务。当锁被释放时,等待队列中的竞争线程被唤醒,从等待链表中移出,竞争线程被重新调度。

使用方法:

1) 声明:

静态声明:

DEFINE_MUTEX(MyMutex)

动态声明:

struct mutex MyMutex;

mutex_init(&MyMutex);

2) 取得和释放:

取得:

void mutex_lock(struct mutex *lock);

int mutex_lock_interruptible(struct mutex *lock);

linux内核带后缀_interruptible,意味着如果收到信号,则函数等待将被打断。

int mutex_lock_killable(struct mutex *lock);

释放:

void mutex_unlock(struct

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值