21:24-22:15 -p136
自旋锁函数
如果你有自旋锁,他可以在被运行在(硬件或软件)中断上下文获得, 则必须使用一种禁止中断的形式获得. 因为使用其他锁函数,迟早会导致死锁。
【为什么?】
读取者和写入者自旋锁
允许多个进程读,但只有一个进程可以写。
锁陷阱
不明确的规则
锁定模式,策略,必须一开始就规定好。
无论是信号量还是自旋锁,不允许第二次获得锁。
外部函数显式调用锁,内部函数则默认已经获得锁。
锁的顺序规则
如果要获得多个锁,如 锁1 和 锁2,则所有进程必须始终以相同的顺序获得锁,即先 获得锁1,然后才能获得锁2。如果顺序乱了,则必然导致死锁。
细 /粗 粒度加锁
各有优劣。
作为一个通用的规则, 你应当从相对粗的加锁开始, 除非你有确实的理由相信竞争可能是一个问题. 我们需要抑制住过早考虑优化的冲动。
除了锁之外的办法
免锁算法
原子变量
原子位操作
seqlock
2.6内核包含了一对新机制来提供快速地, 无锁地存取一个共享资源. seqlock 在这种情况下工作, 要保护的资源小, 简单, 并且常常被存取, 并且很少写存取但是必须要快。
seqlock 通常不能保护含有指针的数据结构
读取-复制-更新 (Read - Copy - Update RCU)
LDD3 D09 01.09 星二
最新推荐文章于 2023-03-17 12:05:41 发布