非阻塞、无锁、无等待算法的核心与区别

本文是一系列并发编程文章的学习笔记之一,意在厘清非阻塞、无锁、无等待着三个概念。

[color=blue][size=xx-large]非阻塞[/size][/color]
阻塞是操作系统层面的概念,发生阻塞的准确含义为:当前执行上下文通过调用操作系统的接口,使自己进入等待某一事件发生的状态。在这种等待中,该上下文将被从操作系统的调度队列中移除,而将不获得任何CPU执行时间。直到等待的事件发生,才被从新纳入调度。

因此,所谓非阻塞算法是指,算法中不存在任何位置将使当前上下文进入阻塞的状态。

[color=blue][size=xx-large]无锁[/size][/color]
无锁是一种比非阻塞更强的条件,也就是说所有无锁算法都是非阻塞的,但是非阻塞算法不一定是无锁的。

无锁算法指的是,在不用互斥锁的情况下解决并发执行环境的Race Condition。无锁算法与非阻塞算法的关键区分在于:无锁算法在执行过程中,某一上下文因为任何原因无法继续执行需要暂时搁置时,其他上下文能否继续执行,如果可以则该算法是无锁算法,否则该算法就不是无锁算法,顶多只有可能是非阻塞算法。

例如,自旋锁(Spin-lock)算法:某一执行上下文在获得锁之后,其他上下文需要循环忙等,
就是一种非阻塞算法但不是无锁算法。因为在自旋锁算法中,所有上下文在并发冲突时都是忙等,没有通过调用操作系统的接口把自己从操作系统的调度队列中移除。但它不是无锁算法,因为当获得锁的上下文无法继续执行时,其他所有上下文都必须忙等而无法继续执行。

[color=blue][size=xx-large]无等待[/size][/color]
无等待是一种比无锁更强的条件,无等待算法要求在无锁算法的定义基础上,增加一个条件:所有上下文的执行都必须在有限的步骤内可以完成,而不依赖于其他上下文的状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值