同步机制

lock-base 机制

 

semaphore(P 减操作,  V是加操作)

semaphore 在SMP中都要用到 memory  barrier , 通过唯一的内存访问来保证一致性。

 

mutex( 资源为 1 的semaphore)

read/write lock (semaphore的衍生, reade pv: 1, write pv :一个极大值)

condition(posix应用程序) 和 completion(内核) 对 semaphore 休眠的优化(semaphore假定大多数时候不会休眠,但condition每次都会导致context switch)。

 

spinlock SMP 中 spinlock 就是不断轮询,这对在 临界区中 操作时间比较少的优化,省去了context switch. 但用不好就会 cpu 100% (spinlock 只在内核中有,用户层代码会被打断,没办法保证原子性)

spinlock 也有 rw_lock, 还有针对 irq 的 soft_irq的优化。

 

锁机制的本质就是P、V,其它都是基于不同使用场景的优化。

 

Linux 内核可用 lock_meter 测量 锁竞争的性能损失。

 

Lock-Free

 

Lock-Free: 保证任何时候都有一个线程在运行(这不要求线程不能休眠,spin_lock需要)。

Wait-Free:   线程执行时间不会受其它线程的干扰。

atom interger or bit 操作(x86 cpu 指令支持, 本来整数操作是原子的,但SMP中多个CPU,每个CPU都有 cache(L1,L2, register), 这就会导致不一致)。

一个读者和一个写者,使用一个循环缓冲区,不需要加锁。

kfifo 内核通用的fifo队列机制,writer使用spin_lock来互斥.(要求写操作可以redo)

seqlock  写者可以立马写(更新序号),但读者需要判断,临界区前和后读到的seq序号是否一致,不一致就要重读。读者需要容忍数据的不一致,出现不一致就重试。写者使用spin_lock来互斥。(写者优先,要求读操作可以redo,  writer 是 wait-free, reader是lock-free)

RCU  是 写时拷贝,per-cpu 数据结构的结合。(对读者优化,要求写操作可以redo, reader 是 wait-free)

lock-free , 要求部分操作是可重复的(commit-retry), 和CAS原子操作。

转载于:https://www.cnblogs.com/napoleon_liu/archive/2010/01/07/1641082.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值