内核同步 - 第1部分
1. LDV项目规则
LDV(Linux驱动验证)项目有关于Linux模块(主要是驱动)和核心内核编程方面的实用“规则”。例如,不能对互斥锁加锁两次,也不能在未加锁的情况下解锁(规则详情见:http://linuxtesting.org/ldv/online?action=show_rulerule_id=0032)。在一个内核驱动中,就存在互斥锁重复获取导致死锁的实际例子,同时也有相应的修复方法。
2. 自旋锁的使用场景
在选择使用互斥锁还是自旋锁时,可参考以下规则:
- 若临界区运行在原子(中断)上下文或不能睡眠的进程上下文中,应使用自旋锁。
- 若临界区运行在进程上下文中且需要在临界区睡眠,则使用互斥锁。
3. 自旋锁的简单使用
使用自旋锁的所有API时,需包含头文件 <linux/spinlock.h> 。
- 声明与初始化 :
- 自旋锁通过 spinlock_t 类型声明,可使用 spin_lock_init() 宏动态初始化,示例代码如下:
spinlock_t lock;
spin_lock_init(&lock);
- 也可使用 `DEFINE_SPINLOCK(lock);` 进行静态声明和初始化。
超级会员免费看
订阅专栏 解锁全文
1354

被折叠的 条评论
为什么被折叠?



