lock-free - 无锁和无锁有什么区别?

标签 lock-free lockless

在一些关于算法的文章中,有的使用lockfree这个词,有的使用lockless这个词。 无锁无锁有什么区别?谢谢!

更新

http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel-dpdk-programmers-guide.pdf

第 5.2 节 --“Linux* 中的无锁环形缓冲区”,这是使用单词“lockless”的示例

最佳答案

如果一种算法满足以下条件,则该算法是无锁的:当程序线程运行足够长的时间时,至少有一个线程取得进展(对于进度的某种合理定义)。所有无等待算法都是无锁的。

一般来说,无锁算法可以分为四个阶段:完成自己的操作、协助阻塞操作、中止阻塞操作和等待。完成自己的手术会因同时进行协助和中止的可能性而变得复杂,但始终是完成手术的最快途径。例如非阻塞算法

无锁编程是一组无需使用锁即可安全操作共享数据的技术。有无锁算法可用于传递消息、共享数据列表和队列以及其他任务。无锁编程相当复杂。例如所有纯函数式数据结构本质上都是无锁的,因为它们是不可变的

关于lock-free - 无锁和无锁有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20467247/

相关文章:

c# - 实现无锁队列(用于 Logger 组件)

c - 为什么 Linux 内核无锁链表有 head 和 node 结构?

multithreading - 无锁有界 MPMC 环形缓冲区故障

原子变量可以代替 pthread_rwlock 吗?能不能免锁

c++ - 在磁盘上实现无锁数据结构

c++ - 如何 spsc_queue.pop() 这个结构?

multithreading - Delphi [volatile]和InterlockedCompareExchange不可靠吗?

x86 - 如果我不使用隔离墙,一个核心看到另一个核心的写入需要多长时间?

multithreading - 是否存在用于多个读取或写入线程的无锁队列之类的东西?

带交换的 Golang 无锁数组