当前位置: 首页 > 知识库问答 >
问题:

程序集'lock;`为什么我们需要它?[副本]

乐钱青
2023-03-14

我在读关于锁的lock 程序集中的前缀

简而言之,它确保指令在没有任何中断的情况下完成。

但我的问题是为什么我们需要锁?中间可能会中断什么指令?即使当CPU进行上下文切换时,它也不在指令的中间。那么这到底是用来干什么的呢?


共有1个答案

乜嘉悦
2023-03-14

考虑某种读修改写操作。例如,假设我们想清除一点。现在想象另一个内核同时在同一个内存位置设置一个位。如果没有锁定前缀,可能会发生以下情况:

  1. 核心A读取内存位置

哎呀,核心A完成的位集丢失了。

锁前缀确保核心B对内存位置的读取不能在核心A的读取和核心A的写入之间进行。

在糟糕的过去,锁前缀几乎锁定了整个总线。这将确保没有读取内存位置,但也将确保没有读取其他所有内存位置!在现代CPU上,它只是锁定缓存线,允许其他内核执行各种其他操作,只是不访问该内存位置(或与其共享缓存线的任何内存位置)。

 类似资料:
  • 问题内容: 我对Maven快照的含义以及为什么要构建一个快照感到困惑。 问题答案: Maven中的快照版本尚未发布。 这个想法是,前一个版本(或任何其他版本)完成后,存在一个。那个版本可能会变成 。它基本上是“ 开发中”。这可能接近实际发行版,或相当遥远(0.9例如,发行后立即发行)。 “真实”版本和快照版本之间的区别在于快照可能会得到更新。这意味着今天下载的文件可能不同于昨天或明天下载的文件。

  • 问题内容: Angular应用使用属性而不是事件。 为什么是这样? 问题答案: ng-click包含一个角度表达式。Angular表达式是在Angular 范围的上下文中求值的,该范围绑定到具有ng- click属性的元素或该元素的祖先。 Angular表达式语言不包含流控制语句,也不能声明变量或定义函数。这些限制意味着模板只能访问由控制器或指令提供的变量和运行功能。

  • 以我的拙见,关于“什么是单子”这个著名问题的答案,尤其是投票最多的答案,试图解释什么是单子,而没有明确解释为什么单子是真正必要的。它们能被解释为一个问题的解决方案吗?

  • 为什么我们需要字典? 计算机最适合使用数字,而人类最适合使用姓名。我们创建了DNS以便记住主机名而不是IP地址。字典以相同的方式使用,因此我们可以记住AVP名称而不是类型编号。当FreeRADIUS解析请求或生成响应时,会查阅字典。 但是,字典与DNS不同,因为RADIUS客户端不知道FreeRADIUS使用的这些“友好”名称。永远不会在RADIUS客户端和RADIUS服务器之间交换AVP名称。

  • 问题内容: 我相信大家都知道setUp(@Before)将在任何测试方法之前执行,而tearDown(@After)将在测试方法之后执行。 我们也知道Junit会为 每个测试方法 创建一个Test实例。 我的问题是,我们可以只将setUp方法的内容移至类Constructor并删除setUp方法吗?是否有任何特定理由保留setUp方法? 问题答案: 这篇(旧的)JUnit最佳实践文章将其描述如下:

  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观