在原子变量的上下文中什么是总线锁定?

2023-11-25

我使用 C++ 很长时间了,现在我开始学习汇编并了解处理器的工作原理(不仅仅是为了好玩,而且我必须将其作为测试程序的一部分)。在学习汇编时,我开始听到一些在讨论多线程时到处听到的术语,因为我在科学计算中进行了大量的多线程处理。我正在努力了解全貌,我很乐意帮助我拓宽我的视野。

我了解到,最简单的公共汽车就像一辆复用器后跟解复用器。每个端点都接受一个地址作为输入,以便将两端与某些外部组件连接。两端可以根据地址指向内存、显卡、RAM、CPU 寄存器或其他任何东西。

现在回答我的问题:我不断听到人们争论是否使用互斥体或原子来保证线程安全(我知道没有最终的答案,这不是我的问题,但我的问题是关于比较)。Here例如,有人声称原子是如此糟糕,以至于它们会阻止处理器完成体面的工作由于总线锁定.

有人可以解释一下吗什么是总线锁定,详细一点,以及为什么它不像互斥锁,而据我所知,互斥锁需要至少两个原子操作来锁定和解锁。


来自英特尔® 64 和 IA-32 架构软件开发人员手册:

从 P6 系列处理器开始,当LOCKprefix 是指令的前缀,并且正在访问的内存区域在处理器内部缓存,因此 LOCK# 信号通常不被置位。相反,只有处理器的缓存被锁定。在这里,处理器的缓存一致性机制确保操作在内存方面以原子方式执行。

有专门的非时间性的存储绕过缓存的指令。所有其他加载和存储通常都会通过缓存,除非内存页面被标记为不可缓存(例如 GPU 或 PCIe 设备内存)。

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

在原子变量的上下文中什么是总线锁定? 的相关文章

随机推荐

  • 使用 Rspec 测试 rake 任务不接受参数

    根据我的说法 我正在尝试为我的 rake 任务之一编写 Rspec 测试斯蒂芬 哈格曼的这篇文章 lib tasks retry rake namespace retry do task message message id gt envi
  • 寻找最小全语法窗口的有效算法?

    A 全语法窗口是包含所有 26 个字母表的较大文本片段的子字符串 引用维基百科的一个例子 给出以下文本 我唱了 还以为自己唱得很好 但他只是用一种非常好奇的表情抬头看着我的脸 然后说 你唱歌多久了 小姐 文本中最小的全语法窗口是这个字符串
  • 错误:此模板尝试加载组件程序集“Microsoft.VisualStudio.SmartDevice”

    我安装了 Visual studio 2015 并尝试为 Windows Phone 8 1 创建测试应用程序 当我创建一个新项目时 我收到以下消息 关于如何解决这个问题有什么建议吗 这是解决方案 打开 Visual Studio 并转到T
  • 使用反射添加EventHandler

    我有这段代码不起作用 public CartaoCidadao InitializeComponent object o WebDAV Classes SCWatcher LoadAssembly MethodInfo method thi
  • SonarQube -integrationTest.exec -sonar Runner (Gradle) 或“sonar-runner”命令 - 显示 0.0% 覆盖率

    运行基于 Gradle 的构建和集成测试后 我在 build jacoco 文件夹中成功生成了 Jacoco 的 2 个 exec 文件 梯度命令 gradle clean 构建集成测试 完成后 它会在 build jacoco 文件夹下生
  • SelectMany 创建大量 SQL select 语句,而不是带有 join 的 SQL select 语句

    我正在写一个查询SelectMany并检查它在 LINQPad 中生成的 SQL 查询非常简单 假设我有 3 个实体 Customer Order OrderItem OrderItem保存有关订购什么产品以及订购数量的信息 我想得到全部O
  • 为什么“memset(arr, -1, sizeof(arr)/sizeof(int))”不能将整数数组清除为-1?

    是不是不能使用memset在整数数组上 我尝试了以下方法memset调用并没有得到正确的整数值int array int arr 5 memset arr 1 sizeof arr sizeof int 我得到的值是 arr 0 1 arr
  • 如何检查服务是否正在运行[重复]

    这个问题在这里已经有答案了 我想显示服务状态 如果它正在运行或停止 我正在使用下面的代码 但它在开始服务之前显示 已停止 当服务启动时 它显示 正在运行 当它再次停止时 它仅显示 正在运行 我在设置共享首选项状态时犯了任何错误吗 在主要活动
  • 从 pandas.DataFrame 中选择复杂的标准

    例如我有简单的 DF import pandas as pd from random import randint df pd DataFrame A randint 1 9 for x in range 10 B randint 1 9
  • PHP getopt 操作

    这个问题是关于 php 中的 getopt 函数 我需要将两个参数传递给 php 脚本 例如 php script php f filename t filetype 现在 根据文件类型 可以是 u c 或 s 我需要执行正确的操作 我正在
  • 使用 python 从重定向的 stdin 读取文件

    我正在尝试读取通过命令行重定向到标准输入的文本文件的内容 并在接收者必须将其组装回原始形式时通过互联网发送它 例如 python test py lt file txt 我尝试读取该文件并使用以下代码将其组装回来 灵感来自link for
  • 从服务器端强制刷新客户端页面[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何从服务器端刷新当前客户端视图页面 例如 如果我想强制刷新所有客户端现在正在查看的页面
  • 如何在卸载时自动从主屏幕删除应用程序快捷方式?

    我正在开发一个应用程序 该应用程序应在安装后将其快捷方式添加到主屏幕 并在卸载应用程序后将其删除 该应用程序将预安装在最终用户设备上 但仍然应该有卸载选项 这个任务看起来很简单 但实施起来却遇到了很多麻烦 我做了什么 使用添加快捷方式到主屏
  • 在整个范围内均匀生成随机数

    我需要在指定的间隔 max min 内生成随机数 此外 随机数应该均匀分布在区间内 而不是位于特定点 目前我生成为 for int i 0 i lt 6 i DWORD random rand max min 1 min 根据我的测试 随机
  • LinkedHashSet .equals() 与 LinkedList .equals() 具有相同的元素但顺序不同

    考虑以下 SSCCE public static void main String args LinkedHashSet
  • CSS:如何垂直和水平对齐图像?

    我的页面有空间容纳图像 例如最大尺寸为 100x100 的图像 用户可以上传任何尺寸的图像 Web 应用程序将在保持宽高比的情况下将其大小调整为 100x100 因此 图像的大小可以调整为 75x100 或 100x75 等 无论调整大小的
  • 如何使用 Django 中内置的“password_reset”视图?

    我在 urls py 中设置了以下条目 r password reset django contrib auth views password reset 但一旦我去http 127 0 0 1 8000 password reset 我收
  • 在 colgroup 中使用文本对齐中心

    我的页面中有一个表格 我使用 colgroups 以相同的方式格式化此列中的所有单元格 它适用于背景颜色等 但我似乎无法弄清楚为什么文本对齐中心不起作用 它不会将文本居中对齐 Example table cellspacing 5 tabl
  • 如何在flutter中显示.9.png格式的图片?

    这是我的代码 new Image asset images launcher border highlight 9 png fit BoxFit fill 当我改变图像的宽度和高度时 它的显示效果很差 但在原生android中显示正常 fl
  • 在原子变量的上下文中什么是总线锁定?

    我使用 C 很长时间了 现在我开始学习汇编并了解处理器的工作原理 不仅仅是为了好玩 而且我必须将其作为测试程序的一部分 在学习汇编时 我开始听到一些在讨论多线程时到处听到的术语 因为我在科学计算中进行了大量的多线程处理 我正在努力了解全貌