以 i++ 为例子。
自旋锁不是 lock free , 线程持锁后进行 i++, 如果出现突发问题,导致线程阻塞等情况未释放锁,其他线程会处于等待.
如下代码实现 i++
do {
} while(!cas(&i, i, i+1));
i++;
如果线程跳出循环后, 相对于其他线程一定是在 i++ 成功后自行 cas ,才能跳出 while , 如果跳出 while 的线程在执行 i++ 之前也出现突发问题,导致线程阻塞等情况未释放锁 (i++ 的操作等同于 自旋锁的释放锁的操作呀), 同理, 其他线程会处于等待。
不符合lock free, 也会让其他线程等待, 为什么是 lock free?