无锁和无锁之间有什么区别?

时间:2013-12-09 09:30:16

标签: lock-free lockless

在一些关于算法的文章中,有些使用单词lockfree,有些则使用locklesslocklesslockfree之间有什么区别?谢谢!

更新

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

第5.2节 - “Linux *中的无锁环缓冲区”,这是使用“无锁”字样的一个例子

2 个答案:

答案 0 :(得分:4)

如果算法满足当程序线程运行足够长时至少有一个线程进行(对于某些明确的进度定义),则算法是无锁的。所有无等待算法都是无锁的。

通常,无锁算法可以分四个阶段运行:完成一个人自己的操作,协助阻碍操作,中止阻塞操作和等待。完成自己的操作很复杂,因为可能同时提供援助和堕胎,但总是最快的完成途径。例如非阻塞算法

无锁编程是一组用于在不使用锁的情况下安全地操作共享数据的技术。有无锁算法可用于传递消息,共享列表和数据队列以及其他任务。无锁编程非常复杂。例如所有纯功能数据结构本质上都是无锁的,因为它们是不可变的

答案 1 :(得分:1)

无锁是一种更正式的东西(寻找无锁算法)。它对于数据结构的本质是,如果两个线程/进程访问数据结构并且其中一个死亡,另一个仍然保证完成操作。

Lockless与实现有关 - 它意味着算法不使用锁(或使用更正式的名称 - 互斥)。

因此,无锁算法也是无锁的(因为如果一个线程锁定然后死亡,另一个线程将永远等待)但不是相反 - 有些算法不使用锁(例如,他们使用比较 - 和交换)但如果其他进程死亡仍然可以挂起。上面提到的dpdk环形缓冲区是一个无锁定的无锁示例。