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

2023-11-25

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

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

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

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


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

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

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

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

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

  • 在 C# 中使用“using”关键字避免多次处置的最佳实践

    当变量是 IDisposable 时 我们有using关键字来管理处置 但是如果我们在方法中返回值怎么办 using twice StringContent stringToStringContent string str using St
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp

随机推荐

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