LDD3 D09 01.09 星二

xiaoxiao2021-02-28  17

21:24-22:15 -p136

 

自旋锁函数

如果你有自旋锁,他可以在被运行在(硬件或软件)中断上下文获得, 则必须使用一种禁止中断的形式获得. 因为使用其他锁函数,迟早会导致死锁。

【为什么?】

 

读取者和写入者自旋锁

允许多个进程读,但只有一个进程可以写。

 

锁陷阱

不明确的规则

锁定模式,策略,必须一开始就规定好。

无论是信号量还是自旋锁,不允许第二次获得锁。

外部函数显式调用锁,内部函数则默认已经获得锁。

 

锁的顺序规则

如果要获得多个锁,如 1 2,则所有进程必须始终以相同的顺序获得锁,即先 获得锁1,然后才能获得锁2。如果顺序乱了,则必然导致死锁。

 

/ 粒度加锁

各有优劣。

作为一个通用的规则, 你应当从相对粗的加锁开始, 除非你有确实的理由相信竞争可能是一个问题. 我们需要抑制住过早考虑优化的冲动。

 

除了锁之外的办法

免锁算法

原子变量

原子位操作

seqlock

2.6内核包含了一对新机制来提供快速地, 无锁地存取一个共享资源. seqlock 在这种情况下工作, 要保护的资源小, 简单, 并且常常被存取, 并且很少写存取但是必须要快。

 

seqlock 通常不能保护含有指针的数据结构

 

读取-复制-更新 Read - Copy - Update RCU

转载请注明原文地址: https://www.6miu.com/read-1400321.html

最新回复(0)