表格
类型 | 不同 |
---|---|
lock | 不需要初始化函数,通过汇编实现 |
spin_lock | 加锁失败死循环等待,禁止抢占 |
mutex | 加锁失败进入睡眠 |
不同点
-
自旋锁特点
-
死循环等待有可能造成死锁:等待时间太长。
禁止抢占
互斥量特点
- 不禁止抢占; 加锁不成功,则进入睡眠。 __lock
- 通过以下汇编实现
__lock:
48 void __lock(void)
49 {
50 asm __volatile__(
51 "1:\n\t"
52 "ldrex r0, [%0]\n\t"
53 "cmp r0, #0\n\t"
54 "bne 1b\n\t"
55 "strex r0, %1, [%0]\n\t"
56 "cmp r0, #0\n\t"
57 "bne 1b\n\t"
58 :
59 : "r" (&lock), "r" (1)
60 : "r0"
61 );
62 }
相同点
- 都使用于一段连续的代码
- 解决了同级别竞争
模块初始化
关于linux内核中this_module的结构体,网上有很多,这一篇讲的非常详细。
this_module的解释
主要是引用计数,在使用时不让他人拔出。