无锁和无锁有什么区别?

2023-11-26

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

Update

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

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


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无锁和无锁有什么区别? 的相关文章

  • 寻找对我的线程安全、无锁队列实现的批评

    因此 经过一番研究后 我写了一个队列 它使用固定大小的缓冲区 因此它是一个循环队列 它必须是线程安全的 我已经尝试使其成为无锁的 我想知道它出了什么问题 因为这些事情我自己很难预测 这是标题 template
  • 无锁同步

    我的问题与多线程无锁同步有关 我想知道以下内容 实现这一目标的一般方法是什么 我在某处读到过有关 LockFreePrimitives 的内容 如 CompareAndExchange CAS 或 DoubleCompareAndExcha
  • ARM LL/SC 通过寄存器宽度或缓存行宽度进行独占访问?

    我正在开发我的无锁数据结构库的下一个版本 使用 ARM 上的 LL SC 对于 LL SC 的用例 我需要将其与 LD REX 和 STREX 之间的单个 STR 一起使用 而不是用它来模拟 CAS 现在 我已经编写了代码并且可以运行 然而
  • 无锁多线程适合真正的线程专家

    我正在读一本answer that 乔恩 斯基特提出了一个问题 他在其中提到了这一点 就我而言 无锁多线程适用于真正的线程专家 而我不是其中之一 这不是我第一次听到这个 但我发现很少有人谈论如果你有兴趣学习如何编写无锁多线程代码 你实际上是
  • 动态无锁内存分配器

    编写满足无锁进度保证的算法或数据结构的困难之一是动态内存分配 调用类似malloc or new不保证以便携方式无锁 然而 许多无锁实现malloc or new存在 并且还有各种可用于实现无锁算法 数据结构的无锁内存分配器 但是 我仍然不
  • 无锁堆栈实现想法 - 目前已损坏

    我想出了一个想法 尝试实现一个无锁堆栈 该堆栈不依赖引用计数来解决 ABA 问题 并且还可以正确处理内存回收 它在概念上与 RCU 类似 并且依赖于两个功能 将列表条目标记为已删除 以及跟踪遍历列表的读者 前者很简单 它只使用指针的LSB
  • CPU 中的相关负载重新排序

    我一直在阅读内存屏障 软件黑客的硬件视图 http www puppetmastertrading com images hwViewForSwHackers pdf 保罗 E 麦肯尼 Paul E McKenney 撰写的一篇非常受欢迎的
  • 易失性是否会阻止引入的读取或写入?

    In C volatile关键字确保读取和写入分别具有获取和释放语义 但是 它是否说明了有关引入的读取或写入的内容 例如 volatile Thing something volatile int aNumber void Method A
  • 了解 CLR 2.0 内存模型

    乔 达菲 给予描述 CLR 2 0 内存模型的 6 条规则 http www bluebytesoftware com blog 2007 11 10 CLR20MemoryModel aspx 这是实际的实现 而不是任何 ECMA 标准
  • CAS 冲突的 CPU 内部特征是什么?

    我正在尝试了解 x86 x64 上 CAS 的低级机制 我非常感谢一些帮助 见解 我一直在思考这个问题的原因是我试图推理指数退避 并原则上找出正确的退避延迟单位应该是什么 如果我查看无锁空闲列表基准测试 没有指数退避 我会发现随着线程数量的
  • 我是否需要为线程之间的更改通知标志设置内存屏障?

    我需要一个非常快速的 在 读取器成本低 的意义上 而不是 低延迟 线程之间的更改通知机制 以便更新读取缓存 情况 Thread W 编写器 更新数据结构 S 在我的例子中是地图中的设置 只是偶尔一次 Thread R Reader 维护一个
  • 奇怪的shared_ptr行为

    我发现了一个非常奇怪的行为std shared ptr在c 中 以下示例与标准指针完美配合 然而使用std shared ptr导致这里出现分段错误 参见下面的回溯 我知道 访问std shared ptr来自多个线程是不安全的 因此我使用
  • 对深度不可变类型进行延迟初始化是否需要锁?

    如果我有一个深度不可变的类型 所有成员都是只读的 如果它们是引用类型成员 那么它们也引用深度不可变的对象 我想在类型上实现一个延迟初始化的属性 如下所示 private ReadOnlyCollection
  • `__CPROVER_fence()` 参数

    我看到类似的代码 CPROVER fence RRfence RWfence 正在像这样的项目中使用Linux RCU 测试 https git kernel org pub scm linux kernel git torvalds li
  • boost C++ 无锁队列与共享队列

    我对多线程编程很陌生 我只知道最常见的生产者 消费者 队列 我正在使用 boost c 库 我不知道是否更好地使用 boost lockfree queue 或使用 mutex 和 condition variable 的 std queu
  • 以下为可重入锁编写的代码是否容易出现指令重新排序错误?

    我最近在学习无锁并发中的可重入锁时遇到了以下代码 class ReentrantLock32 std atomic
  • 读取由其他线程上的 Interlocked 更新的 int

    这是重复 如何正确读取 Interlocked Increment ed int 字段 https stackoverflow com questions 6139699 how to correctly read an interlock
  • Delphi是否存在无锁队列“多个生产者-单个消费者”?

    我发现了几个针对单个生产者 单个消费者的实现 但没有找到多个生产者 单个消费者的实现 Delphi是否存在 多个生产者 单个消费者 的无锁队列 无锁队列全线程库 http otl 17slon com支持多个生产者 您可以将它与线程库分开使
  • std::atomic 将一对原子 int32 视为一个原子 int64?

    我有一对 unsigned int32 std atomic
  • 将数据从一个线程传递到另一个线程的最快可能方法

    我正在使用增强spsc queue将我的东西从一个线程移动到另一个线程 这是我的软件中的关键位置之一 所以我想尽快完成它 我写了这个测试程序 include

随机推荐

  • 停止自托管owin服务器时完成当前请求

    我有 OWIN 服务器作为控制台应用程序的一部分 你可以在这里看到主要方法 class Program public static ManualResetEventSlim StopSwitch new ManualResetEventSl
  • 从 UIBezierPath 获取点

    我通过以下方式绘制了上面的 BezierPath 位置是用户触摸屏幕的位置 位置将是图表的最大值 CGPoint 原点 CGPointMake xStart 620 0 CGPoint endpt CGPointMake xEnd 620
  • 使用 Hibernate 公式从另一个表中选择实体

    我正在尝试使用 Hibernate 的 Formula 注释从另一个表中检索实体 给出以下代码 Entity class Test Id GeneratedValue strategy GenerationType IDENTITY Col
  • 无法使用 pymongo 2.2 连接到 MongoDB 2.0.5 数据库

    我已经诊断这个问题几个小时了 我想看看是否有 pymongo 专家有任何想法 下面一行代码 连接 pymongo Connection localhost 27017 生成以下错误 usr local Cellar python 2 7 3
  • .htaccess 虚拟主机的基本身份验证?

    我想知道是否可以根据 htaccess 文件中的虚拟主机 URL 设置条件 http 基本身份验证要求 例如 我想要做的是让 mysite com 和 test mysite com 在同一目录中运行相同的代码库 但密码保护 test my
  • SceneKit 每个顶点颜色

    我一直在使用 SceneKit 但我不知道如何创建每个顶点颜色几何体 更准确地说 我想这样做 http openglbook com chapter 2 vertices and shapes html 如果不清楚 请告诉我 Thanks
  • 如何让触摸事件影响容器视图后面的视图?

    我有一个完全覆盖另一个 UIView 的容器视图 容器视图具有透明度以及其他一些功能 搜索栏 表格视图等 我希望触摸事件能够通过容器视图 并在事件发生在透明区域时影响下面的视图 我一直在摆弄容器视图的子类 我试图让 pointInside
  • 如何在Windows 10通用应用程序中使用WCF服务?

    我的 Windows 8 1 应用程序使用 WCF 服务 我需要将我的应用程序移植到 Windows 10 UWP 应用程序 但无法添加服务引用 当我添加服务引用时出现此消息 数据服务客户端代码生成失败 不支持指定的 Windows 应用商
  • 如何从字符串数组或数组列表创建字符串?

    我如何提取字符串 或数组列表中的所有元素 并将所有单词以正确的格式 带有单个空格 组合在一起 然后存储在数组中 String a Java is cool 输出 Java 很酷 Use a StringBuilder String stri
  • 如何加快 Eclipse 项目“刷新”速度

    我有一个相当大的 PHP 代码库 10k 文件 我在 Windows 计算机上使用 Eclipse 3 4 PDT 2 来处理它 而这些文件托管在 Debian 文件服务器上 我通过 Windows 上的映射驱动器进行连接 尽管有 1gbi
  • Ruby 相当于 PHP 的 $this

    相当于PHP的什么 this gt 在鲁比 红宝石相当于this is self 它们都指当前实例 棘手的部分是在 Ruby 类范围内 self指的是该类的当前实例Class它定义了您正在构建的类 在方法内部 self指类的实例 eg cl
  • 在 x86-64 中将寄存器移至自身有什么好处

    我正在 x86 64 NASM 中做一个项目 并遇到了指令 mov rdi rdi 在我的教授写的编译器的输出中 我已经进行了全面搜索 但找不到提及为什么需要这样做 它会影响标志还是我不明白的聪明之处 为了提供一些上下文 它在同一寄存器递减
  • Google Analytics API 错误“无法同时查询选定的维度和指标。”

    我必须同时从 GA 电子商务中检索尽可能多的不同指标 我正在使用 google api ruby 客户端 并且不断出现错误 message gt Selected dimensions and metrics cannot be queri
  • 存档上传失败并出现错误:ITMS-90470 缺少 TVTopShelfImage.TVTopShelfPrimaryImageWide 密钥

    您知道为什么会发生这种情况以及最重要的是如何解决它吗 添加具有什么值的密钥 从 tvOS 10 开始 您必须包含宽顶架图像 Top Shelf Image Wide 大小为2320px by 720px 1x tvOS 人机界面指南 图标和
  • 无法加载 share\octave\packages 中可用但未在 share\octave\octave_packages 中列出的包

    短篇故事 在目录中 octave 4 2 1 share octave packages最初有 45 个包子目录 其中 m和其他文件 例如financial 0 5 0 但我找不到使用它们的方法 更详细 我已经解压了便携式 zip 版本Oc
  • 使用 rxjs 实现指数退避

    角7docs提供这个实际用法的例子rxjs Observable为 AJAX 请求实现指数退避 import pipe range timer zip from rxjs import ajax from rxjs ajax import
  • 将rtf或文本文件加载到UITextView iphone sdk中

    嗨 我想知道如何将 rtf 或文本文件加载到 UITextView 中 我使用了几个代码 但不起作用 NSString filePath NSBundle mainBundle pathForResource filename ofType
  • 使用 itext 5.5.5 进行数字签名

    我从 iText 升级5 2 1到iText5 5 5 我使用 PdfStamper 和 PdfSignatureApperance 来应用数字签名 这是我的代码片段 PdfStamper stamper PdfStamper create
  • 第二个 AsyncTask 未执行

    我有 2 个 AsyncTask 一个正在创建套接字连接 另一个正在使用这些套接字传输对象 我的代码是这样的 try connectat true transmitter new SocketTransmitter transmitter
  • 无锁和无锁有什么区别?

    在一些关于算法的文章中 有些使用这个词lockfree 还有一些使用lockless 有什么区别lockless and lockfree 谢谢 Update http www intel com content dam www publi