首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无锁和无锁有什么区别?

无锁和无锁有什么区别?
EN

Stack Overflow用户
提问于 2013-12-09 09:30:16
回答 2查看 9.8K关注 0票数 12

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

更新

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-09 09:39:50

如果一个算法满足程序线程足够长的运行时间,那么它是无锁的,至少其中一个线程会取得进展(对于某些合理的进度定义)。所有的无等待算法都是无锁的。

一般来说,无锁算法可以分四个阶段运行:完成自己的操作、辅助阻塞操作、中止阻塞操作和等待。完成自己的手术是复杂的,可能同时提供援助和堕胎,但始终是最快的途径完成。例如非阻塞算法

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

票数 11
EN

Stack Overflow用户

发布于 2014-11-27 09:00:02

无锁是一件更正式的事情(寻找无锁算法)。对于数据结构来说,它的本质是,如果两个线程/进程访问数据结构,其中一个线程/进程死亡,另一个线程/进程仍能完成操作。

无锁是关于实现的--它意味着算法不使用锁(或者使用更正式的名称--互斥)。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20467247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档