lock-free

1、无锁数据结构基本思路
是线程间共享一个指向数据结构的指针。每当一个线程企图修改数据结构的时候,它在线程局部创建一个当前数据结构的拷贝然后做出相应的修改。完成修改后使用 compare_and_swap 来尝试将共享的数据结构指针更新成指向本地拷贝的指针。如果 compare_and_swap 失败则说明有其他线程抢先完成了修改,这个线程将重新读取共享指针并重复拷贝和修改的操作直到 compare_and_swap 成功。这个算法保证了无锁进展 (lock-free progress):就算任何一个线程在操作数据结构时崩溃,都不会影响到其他线程,系统作为一个整体总是能保证进展。但是不难想到这种通用构建的效率并不高,因为它实质上阻止了任何对于数据结构的并发操作——任何时刻都只可能有一个线程成功修改共享的数据结构指针,其他线程的操作必然会失败和重试。

作者:张徳力
链接:https://www.zhihu.com/question/23705245/answer/80814227
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2、ABA问题:
https://zhuanlan.zhihu.com/p/110301415

你可能感兴趣的:(数据结构)