这三者的担保程度是逐渐增强的,原文参考 1024cores
obstruction free
只有在没有其他线程竞争的情况下,一个线程才能取得进展。
- 两个线程可以互相阻碍对方的进展,形成一个活锁
- 被阻塞/中断/终止的线程不能阻碍其他线程的进展
- obstruction free的算法可以比lock free算法更快
lock free
不论在何种情况下,整个系统会取得进展(总有一个线程有进展,但不确定是谁)。但是并不担保每个单独的线程取得进展。
- 单独的线程可以遭遇饥饿
- 被阻塞/中断/终止的线程不能阻碍其他线程的进展
- 一般使用CAS之类的
wait free
无论外部因素如何(线程竞争、其他线程被阻塞),每个线程都会取得进展。每个操作都会在有限步数内执行。
- 同步算法中最强的担保
- 一般使用的是atomic_fetch_add(int *pointer,int b),一般不使用CAS等,因为CAS通常与一个“重复直到成功”的循环绑定出现