热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当我使用x86_64CAS指令时,只能完全锁定一个缓存行或L3缓存?

如何解决《当我使用x86_64CAS指令时,只能完全锁定一个缓存行或L3缓存?》经验,为你挑选了1个好方法。

当我使用x86_64 CAS指令时LOCK CMPXCHG,即原子(读取值,比较并写回结果),此时锁定的内容:

    L3缓存中只有一个缓存行?(此时没有一个核心无法读取/写入L3中的此缓存行)

    或L3缓存完全?(此时没有一个核心无法读取/写入L3缓存)

这是真的吗,x86_64 Intel CPU使用?

独占缓存行状态(MOESI/MESIF)的1-aproach

除了Exclusive之外的任何州的第二个方法

Leeor.. 6

两者都不准确.第二种类似于总线锁上实际发生的情况,在现代x86 CPU中,当常规锁无法工作时,这是一种(希望)罕见且病态的情况.它曾经在旧的486 /早期Pentiums上很常见,但在较新的产品上,常见的情况要简单得多 - 你将线路锁定在缓存中,但是因为你想尽可能快地进行读取 - 修改 - 写入 - 在L3中这样做也没有意义.相反,您将选择最接近操作核心的缓存 - 可能是L1或某些等效的内部结构.

即使使用简单的MESI,您也可以保证原子RMW在缓存中安全地完成 - 您首先获得该行的所有权(就像任何正常的写入所需),然后当您确定不知道没有时,您可以执行原子流其他核心有这条线.唯一的问题是窥探可能在理论上处于中间位置,因此解决方案通常只是阻止此行的窥探直到RMW完成.但是,在此期间允许任何其他活动没有问题(例如来自同一核心的其他请求,或窥探进入.唯一的另一个限制是关于内存排序,但通常在内存单元中处理(其中有仍然是一个秩序的概念)而不是在缓存.

另请参阅本答案中的手册部分- 多核CPU上的x86 LOCK问题



1> Leeor..:

两者都不准确.第二种类似于总线锁上实际发生的情况,在现代x86 CPU中,当常规锁无法工作时,这是一种(希望)罕见且病态的情况.它曾经在旧的486 /早期Pentiums上很常见,但在较新的产品上,常见的情况要简单得多 - 你将线路锁定在缓存中,但是因为你想尽可能快地进行读取 - 修改 - 写入 - 在L3中这样做也没有意义.相反,您将选择最接近操作核心的缓存 - 可能是L1或某些等效的内部结构.

即使使用简单的MESI,您也可以保证原子RMW在缓存中安全地完成 - 您首先获得该行的所有权(就像任何正常的写入所需),然后当您确定不知道没有时,您可以执行原子流其他核心有这条线.唯一的问题是窥探可能在理论上处于中间位置,因此解决方案通常只是阻止此行的窥探直到RMW完成.但是,在此期间允许任何其他活动没有问题(例如来自同一核心的其他请求,或窥探进入.唯一的另一个限制是关于内存排序,但通常在内存单元中处理(其中有仍然是一个秩序的概念)而不是在缓存.

另请参阅本答案中的手册部分- 多核CPU上的x86 LOCK问题


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 【系统架构师精讲】(16):操作系统核心概念——寄存器、内存与缓存机制详解
    在计算机系统架构中,中央处理器(CPU)内部集成了多种高速存储组件,用于临时存储指令、数据和地址。这些组件包括指令寄存器(IR)、程序计数器(PC)和累加器(ACC)。寄存器作为集成电路中的关键存储单元,由触发器构成,具备极高的读写速度,使得数据传输非常迅速。根据功能不同,寄存器可分为基本寄存器和移位寄存器,各自在数据处理中发挥重要作用。此外,寄存器与内存和缓存机制的协同工作,确保了系统的高效运行。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 主函数:CStringGetCPUIDString()Copyright(C)shangweixiao2011 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • com.hazelcast.config.MapConfig.isStatisticsEnabled()方法的使用及代码示例 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
author-avatar
phpxiaofei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有