为什么我们在 CMPXCHG 之前需要锁定前缀[重复]

2023-12-08

为什么在intel架构中CMPXCHG之前需要锁定前缀。 请参阅参考http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref-cmpxchg.html

我不确定如果不使用锁会有什么后果。因为在将值加载到 eax 和执行 LOCK CMPXCHG 之间,无论锁定前缀如何,该值都可能会更改,因为将值加载到 eax 和 LOCK CMPXCHG 是两条指令。

意思是说,如果我不使用 CMPXCHG,可能发生的最糟糕的事情是我必须再次旋转。


  • CMXCHG仅当它带有前缀时,在多处理器系统上才是真正的原子(断言总线锁)LOCK。如今,正在使用基于侦听的缓存一致性协议,这消除了对栅栏(总线锁)的需要。
  • 来到问题的第二部分(无论如何,该值都会改变)。是的,在这种情况下CMPXCHG指令失败,但对于所有处理器来说仍然是原子的。

底线: 锁定前缀使CMPXCHG多处理器屏障指令。

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

为什么我们在 CMPXCHG 之前需要锁定前缀[重复] 的相关文章

  • 确保 Clojure 中只有一个服务实例正在运行/启动/停止的规范方法?

    我正在用 Neo4j 支持的 Clojure 编写一个有状态服务器 它可以服务套接字请求 例如 HTTP 当然 这意味着我需要能够从该服务器内启动和停止套接字服务器 在设计方面 我希望能够在此服务器中声明一个 服务 并启动和停止它 我在 C
  • 并行 dask for 循环比常规循环慢?

    如果我尝试使用 dask 并行化 for 循环 它最终会比常规版本执行得慢 基本上 我只是按照 dask 教程中的介绍性示例进行操作 但由于某种原因它在我这边失败了 我究竟做错了什么 In 1 import numpy as np from
  • GNU 并行与 rsync

    我正在尝试运行一些实例rsync并行使用ssh with GNU parallel 我正在运行的命令是这样的 find tmp tempfolder type f name chunck sort parallel gnu j 4 v ss
  • 在 x86 程序集中打印寄存器值的简单方法

    我需要在 8086 Assembly 中编写一个程序 接收来自用户的数据 进行一些数学计算并在屏幕上打印答案 我已经编写了程序的所有部分并且一切正常 但我不知道如何打印号码显示到屏幕上 在我所有计算结束时 答案是 AX 它被视为无符号 16
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • Python 多处理:全局对象未正确复制到子级

    前几天我回答了一个关于SO的问题 https stackoverflow com q 67047533 1925388关于并行读取 tar 文件 这是问题的要点 import bz2 import tarfile from multipro
  • PowerShell,使用 Start-Job 和 Start-Process 测试异步任务的性能/效率

    我很想测试 PowerShell 中异步任务的性能 有用性Start ThreadJob Start Job and Start Process 我有一个包含大约 100 个 zip 文件的文件夹 因此进行了以下测试 New Item 00
  • 为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致?

    test S text global start start xor ax ax mov ax ds mov ax ss mov ax es mov ax fs mov ax gs 我通过这样做得到了反汇编代码文件 x86 64 elf g
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • 如何用OpenCV解决图像处理相机IO延迟

    我有一个 OpenCV 程序 其工作原理如下 VideoCapture cap 0 Mat frame while true cap gt gt frame myprocess frame 问题是如果myprocess耗时较长 超过相机的I
  • 如何让 UI 线程等待信号量,同时处理其他调度程序请求? (就像 MessageBox.Show 本身所做的那样)

    通常 当 UI 线程调用类似的东西时MessageBox Show 当前代码执行不会继续 直到用户单击 确定 但程序将继续运行在 UI 线程上分派的其他代码 In 这个问题 https stackoverflow com questions
  • 嵌入式系统:使用汇编语言时的内存布局

    根据我的理解 嵌入式系统运行机器代码 有多种方法可以生成此代码 一种是用 C 等高级语言编写程序 然后使用编译器获得这样的代码 另一种方法是用汇编语言为该嵌入式系统编写指令 并使用汇编器将其转换为机器代码 现在我们得到了加载到系统并执行的机
  • x86 asm 图形设置的分辨率高于 640x480?

    我刚刚开始使用汇编语言 感觉像学习新东西 并且遇到了一些问题 到目前为止 我一直在浏览的所有教程都没有回答 或者太旧而无法知道 1 我尝试了一些搜索 也许我只是不知道正确的关键字 但我找不到用于更改屏幕分辨率等的图形模式的更新列表 我发现的
  • 并行何时会提高性能

    我试图理解何时使用parallel会提高性能 我用一个简单的代码对其进行了测试 该代码运行了超过 100 000 个项目List
  • Foreach循环无法找到对象

    我正在尝试将 foreach 与并行后端结合使用来加速计算 用于特征选择的 AUCRF 随机森林的交叉验证 如果这确实重要的话 在这样做的过程中 我需要获取向量的子集 向量的名称可以更改 但可以作为字符向量进行访问 我使用 eval par
  • Python:并行修改数组的简单方法

    这个问题可能听起来很简单 但作为 Python 并行化的新手 我肯定会遇到困难 我处理了 OpenMP for C 中的并行化问题 这要容易得多 我需要做的是并行修改矩阵的条目 就是这样 问题是 我无法使用简单的 joblib 库来做到这一
  • 错误:无法识别的指令 [ORG]

    我试图编写一个引导加载程序以在 dos box 中使用 我写了下面的代码 BITS 16 tell the assembler that its a 16 bit code ORG 0x7C00 Origin tell the assemb
  • 测试 xmm/ymm 寄存器是否为零的更快方法?

    It s fortunate that PTEST does not affect the carry flag but only sets the rather awkward ZF also affects both CF and ZF
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da

随机推荐

  • Python:如果 while 条件在循环期间发生变化,如何结束 while 循环?

    我需要一些关于我正在尝试制作的基于文本的游戏中的代码的帮助 我的游戏使用生命值 代码以 while health gt 0 开始 在游戏的另一个点上 当生命值最终 0时 循环仍然继续 如何在 health 0 时结束循环 而不完成整个循环
  • 如何从 powershell.exe 构建 t4 脚手架?

    NuGet 的 PM 控制台非常棒 但您必须在 Visual Studio 中才能使用它 我之前曾问过这个问题 但没有任何答案 我很难相信没有关于该主题的文档 我有两个用户 用户 A 卖鞋 用户 B 卖汽车 每个人都有不同的财产需求 如果我
  • 解析 JSON 时 Unicode 字符不正确

    这是 JSON 示例的链接我的样本JSON 这是样本 Title Close Up Year 1990 Rated NOT RATED Released 30 Oct 1991 Runtime 98 min Genre Documentar
  • 如何防止 JOptionPane.showConfirmDialog 对话框关闭

    我正在显示一个带有一些输入字段的确认对话框 当保存失败 验证失败 时 我想显示一个消息对话框 但我不希望确认对话框消失 我该怎么做呢 下面是我打开ConfirmDialog的actionPerformed方法 当我单击带有此方法的按钮作为事
  • 如何将 ojdbc jar 添加到我的项目并使用它

    我需要一些关于日食的帮助 我有一个项目需要连接到 oracle 数据库 所以我有 ojdbc jar 文件和一个简单的项目 try Class forName oracle jdbc driver OracleDriver Connecti
  • 如何在 Heroku 上流式传输响应 Rails 应用程序

    我有一个在heroku 上运行的rails 3 1 应用程序 我需要为用户提供下载 csv 数据的能力 我正在尝试传输数据 但它都是一次性发送的 对于较大的请求将会超时 Heroku 网站上有很多关于流式传输和分块的讨论 但据我所知 thi
  • 使用 SUM 和 Group BY 更新 T-SQL

    我想用此查询中的值进行更新 但它说它返回多个值 UPDATE PO HEADER SET TOTAL SELECT SUM LINE TOTAL AS NEW LINE TOTAL FROM PO LINE pl PO HEADER ph
  • 在android中的一个请求中上传图像和音频

    如何在android中同时上传图像和音频 我成功地在一个请求中上传了图像和音频 但如何添加多个文件 我参考了这个链接Android 如何上传 mp3文件到http服务器 它工作正常 但我想在此请求中添加另一个文件 请帮助我执行此操作 为此我
  • 将 JSON 对象转换为 html 字符串

    我有一个 JSON const json name superman place universe pets id 1 type dog name Drogo id 2 type cat name Cindy 要求是将其更改为 html 字
  • 在 codeigniter 查询中检索第二个表作为子数组

    我有两个表 A 和 B B 与 A 具有多 1 关系 当从 A 查询行时 我还希望将相应的 B 记录作为数组返回并添加到 A 的结果数组中 所以我最终得到如下结果 A ROW field field B ITEMS item1 item2
  • 使用 OleDb 和 Access 处理 dd/mm/yyyy 日期格式

    我在处理查询 SQL 代码中的日期时遇到问题 我的区域设置格式为 dd mm yyyy 因此当插入日期访问数据库时 它看起来像 dd mm yyyy 但使用选择查询时我得到 mm dd yyyy Query Select EmpEndDat
  • VBA ADODB-使用与数据库相同的工作簿的 Excel 工作表选择查询

    我是 VBA 新手 所以请不要介意问题是否级别较低 我正在尝试运行 SQL 查询 其中必须从同一工作簿的一张工作表中提取数据 SQL Select ProductNumber from sData where ProductSource p
  • linq-to-sql group by 带有计数和自定义对象模型

    我希望用按键分组的 linq to sql 查询的计数来填充对象模型 对象模型看起来有点像这样 public class MyCountModel int CountSomeByte1 get set int CountSomeByte2
  • 在*现代* C++ 中,我应该如何管理*无主*指针?

    In modernC 我应该如何管理unowned指点 我在想类似的事情weak ptr for unique ptr 但这似乎并不存在 Example 例如 如果我有一堂课A拥有一个指针 我应该使用unique ptr
  • 使用 plm() 和 vcovHC() 进行 Hausman-Taylor 估计器的稳健标准误差估计

    假设我使用以下公式计算 Hausman Taylor 估计量plm带有选项的命令 型号 ht 使用结果 我喜欢获得一个稳健的方差 协方差矩阵 以使推理完全稳健 为此目的vcovHC 使用命令 plm 包的一部分 这是一个最小的例子 data
  • 如何仅选择语料库术语的子集以在 tm 中创建 TermDocumentMatrix

    我有一个巨大的语料库 我只对我预先知道的少数术语的出现感兴趣 有没有办法使用以下方法从语料库创建术语文档矩阵tm包 其中只使用和包含我预先指定的术语 我知道我可以对语料库的结果 TermDocumentMatrix 进行子集化 但由于内存大
  • 立即显示启动画面

    我们正在处理 WinForm 应用程序的缓慢启动问题 它是一个大型应用程序 并且具有许多控制程序集 控制组件是 DevComponent 应用Ngen来防止jit编译 但加载时间只是减少了一点 该应用程序有一个启动屏幕 但它仅在应用程序启动
  • MVVM EventToCommand 未找到

    大家好 我正在尝试在列表框的项目中实现点击效果 但我不断收到此错误 未找到类型 cmd EventToCommand 验证您没有缺少程序集引用并且所有引用的程序集均已构建
  • 调整画廊大小的脚本

    我想要调整整个 Galleria div 的大小 并调整使用 Galleria 脚本动态生成的所有图像的大小 到目前为止我有 window resize function var h window height var galleriaHe
  • 为什么我们在 CMPXCHG 之前需要锁定前缀[重复]

    这个问题在这里已经有答案了 为什么在intel架构中CMPXCHG之前需要锁定前缀 请参阅参考http courses engr illinois edu ece390 archive spr2002 books labmanual ins