【发布时间】:2016-12-14 15:40:33
【问题描述】:
我对这两个概念有点困惑。
wiki 上无锁的定义:
如果有保证,非阻塞算法是无锁的 全系统进展
非阻塞的定义:
如果任何算法失败或暂停,则该算法称为非阻塞算法 线程不能导致另一个线程失败或挂起
我认为自旋锁是无锁的,或者至少是非阻塞的。但现在我不确定。因为根据定义,"spinlock is not lock-free" 对我来说也很有意义。就像,如果持有自旋锁的线程被挂起,那么它将导致其他在外面旋转的线程挂起。所以,根据定义,spinlock 甚至不是非阻塞的,更不用说无锁了。
我现在很困惑。谁能解释清楚?
【问题讨论】:
-
自旋锁在旋转失败时无法回退到锁的通常名称是“bug”。
-
是的,无锁是不幸的误称之一,它的含义与大多数人的想象完全不同。
-
@Voo:人们认为这意味着什么?免等待?或者这意味着避免任何称为“锁”的库实现(他们没有意识到用原子滚动自己的锁仍然是锁)?
标签: multithreading lock-free spinlock