osq

内核中的自旋锁 spin lock 常用 SMP 中保护短的临界区。当临界区别其他 CPU 占领时,当前 CPU 如果需要进入临界区,就会一直忙等,不会让出 CPU 。如果保护的临界区太大,忙等的消耗会很长,还不如放弃 CPU 让它做些其他事,这里主要考虑的是,忙等的代价应该小于放弃 CPU 付出的代价,具体使用时需要仔细斟酌。

对于现代 CPU 的设计,CPU 与内存的速度差距太大,为了发挥 CPU 的速度优势,在程序的局部性原理的启示下,CPU 与内存之间设计有 小块高速内存缓存 cache (当然,一些 CPU 实现中,并没有 cache 而是高速,而是使用紧致耦合内存 TCM ,与 cache 有很大区别,但目的是一样的)。 L1 cache 最靠近 CPU ,每个 CPU 一个, L2 和 L3 是多个 CPU 共享的,也就是说,CPU 访问变量时,变量是 L1 上,这意味着一个变量可能有多个备份,为了保证变量数据在多个 CPU 上的一致性,cache 之间有很复杂同步,比如 MESI 同步状态转换实现。自旋锁依赖 SMP 系统中 CPU 之间的原子访问,代表自旋锁的变量会由硬件保证对它的“判断-修改”是原子操作。

由于 cache 的使用,所以自旋锁很不公平。获得锁进入临界区的 CPU,它释放锁退出临界区之后再次企图获得进入临界区的机率比之前等待在自旋锁上的其他 CPU 大的多。因为释放自旋锁之后,cache 同步到其他 CPU 需要一定的时间。而这个时间段里,释放锁的 CPU 无疑具有率先获得锁优势ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值