在一些关于算法的文章中,有些使用了单词lockfree,有些使用了lockless。lockless和lockfree有什么区别?谢谢!
更新
http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel-dpdk-programmers-guide.pdf
第5.2节--“Linux中的无锁环缓冲区*”,这是使用单词“无锁”的一个例子
发布于 2013-12-09 09:39:50
如果一个算法满足程序线程足够长的运行时间,那么它是无锁的,至少其中一个线程会取得进展(对于某些合理的进度定义)。所有的无等待算法都是无锁的。
一般来说,无锁算法可以分四个阶段运行:完成自己的操作、辅助阻塞操作、中止阻塞操作和等待。完成自己的手术是复杂的,可能同时提供援助和堕胎,但始终是最快的途径完成。例如非阻塞算法
无锁编程,是一组安全操作共享数据而不使用锁的技术。有一些无锁算法可用于传递消息、共享列表和数据队列以及其他任务。无锁编程非常复杂。所有纯功能数据结构本质上都是无锁的,因为它们是不可变的。
发布于 2014-11-27 09:00:02
无锁是一件更正式的事情(寻找无锁算法)。对于数据结构来说,它的本质是,如果两个线程/进程访问数据结构,其中一个线程/进程死亡,另一个线程/进程仍能完成操作。
无锁是关于实现的--它意味着算法不使用锁(或者使用更正式的名称--互斥)。
因此,无锁算法也是无锁的(因为如果一个线程锁,然后另一个线程死了,另一个线程将永远等待),但不是相反--有些算法不使用锁(例如,它们使用比较-交换),但是如果另一个进程死了,仍然可以挂起。上面提到的dpdk环缓冲器是一个无锁的例子,它不是无锁的.
https://stackoverflow.com/questions/20467247
复制相似问题