LDD3 D09 01.09 星二

  • 21:24-22:15 -p136

     

    自旋锁函数

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

    【为什么?】

     

    读取者和写入者自旋锁

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

     

    锁陷阱

    不明确的规则

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

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

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

     

    锁的顺序规则

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

     

    / 粒度加锁

    各有优劣。

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

     

    除了锁之外的办法

    免锁算法

    原子变量

    原子位操作

    seqlock

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

     

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

     

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值