首页 > 其他分享 >atomic.StoreInt64

atomic.StoreInt64

时间:2024-03-30 15:45:58浏览次数:28  
标签:StoreInt64 指令 atomic 寄存器 XCHG AX

atomic.StoreInt64

源码

依然将细节隐藏了起来, 沟槽的

TEXT	sync∕atomic·StoreInt64(SB), NOSPLIT|NOFRAME, $0-16
	GO_ARGS
	MOVQ	$__tsan_go_atomic64_store(SB), AX
	CALL	racecallatomic<>(SB)
	RET

汇编

image

解释

  1. 2​ 移入CX

  2. 调用XCHGQ​, 来原子性的修改 CX 和 (AX) 的值

    XCHG

    XCHG​ 是x86架构汇编语言中的一条指令,它的全称是“Exchange Register/Memory with Register”,即“用寄存器交换寄存器/内存中的内容”。这条指令用于交换两个操作数的值。这两个操作数可以是寄存器或其中一个是内存地址。

    举例来说,在x86汇编中:

    XCHG AX, BX
    

    这条指令将交换 AX​ 和 BX​ 两个寄存器中的值。

    或者与内存地址交换:

    XCHG AX, [MEM_ADDR]
    

    这将交换 AX​ 寄存器和内存地址 MEM_ADDR​ 指向的值。

    XCHG​ 指令在多线程编程和同步机制中尤其有用,因为该指令在单个操作中执行读取、写入以及交换操作,能够原子性地进行,避免了多线程中的竞态条件。在现代CPU中,使用XCHG指令通常会隐含地锁定总线,以防止其他处理器或缓存同时访问相同的内存地址,确保操作的原子性。但是这会带来性能的开销,因此在多核处理器上要谨慎使用。

    在现代编程中,通常不需要直接使用XCHG指令。编程语言和它们的库通常会提供更高层次的抽象来处理多线程同步的问题,例如互斥锁(Mutexes)和条件变量(Condition Variables)。然而,操作系统和某些底层系统库可能会在它们的实现中使用这类指令。

总结

Store的底层实现还是依赖于汇编指令的, 这也是经典的底层结构影响上层建筑的一个小例子吧.

值得注意的是, XCHG​的速度是不快的, 尤其是一些老一点的计算机, 这一点稍微提一下, 但是说到底也只是一个指令而已.

标签:StoreInt64,指令,atomic,寄存器,XCHG,AX
From: https://www.cnblogs.com/pDJJq/p/18105578/atomicstoreint64-z1zgvtn

相关文章

  • atomic.LoadInt64
    atomic.LoadInt64源码在经历了之前查看AddInt64​的经历后,我们可以确定LoadInt64​的代码位置TEXTruntime∕internal∕atomic·Loadint64(SB),NOSPLIT,$0-16 JMP runtime∕internal∕atomic·Load64(SB)我们看到,其实是直接调用runtime∕internal∕atomic·Load64​这......
  • Go标准库源码分析: atomic.AddInt64
    atomic.AddInt64介绍原理源码看不到源码解释个勾八原理源码里只有函数doc,但是没有函数实现,但是有一段注释//AddInt64atomicallyaddsdeltato*addrandreturnsthenewvalue.//Considerusingthemoreergonomicandlesserror-prone[Int64.Add]instead/......
  • std::atomic 使用
    std::atomic(原子变量)参考文章包括:C++原子变量atomic详解-知乎(zhihu.com)C++中的原子变量(std::atomic)使用指南_std::atomic-CSDN博客cplusplus.com/reference/atomic/atomic/原子变量是C++11中用于多线程编程的便捷工具(同步机制)之一.其提供了一种线程安全的方式来......
  • 原子操作atomic_t
    参考资料:《正点原子Linux驱动开发指南》 volatile关键字可参考:https://www.cnblogs.com/lethe1203/p/18031883原子操作是防止并发访问共享资源的方法之一 linux内核中对原子操作的定义:#include<linux/types.h>typedefstruct{volatileintcounter;}atomic_t;......
  • C++ <atomic>汇编语言实现原理
    C++<atomic>汇编语言实现原理问题我们先看一下这段代码:/**badcnt.c-Animproperlysynchronizedcounterprogram*//*$beginbadcnt*//*WARNING:Thiscodeisbuggy!*/#include"csapp.h"void*thread(void*vargp);/*Threadroutineprototype*//*......
  • Atomic Habits
    from「TheSurprisingPowerofAtomicHabits」良い習慣も、悪い習慣も、時間に従って、倍の効果にできる1.1の365乗は37.780.99の365乗は00.03良い習慣を努力して続く間、linearな成果を見たいが、よくあるのは、見えない。そのため、失望になりやすい事実は、「"cr......
  • [转]Golang atomic.CompareAndSwapInt64()实例讲解
     原文: http://www.manongjc.com/detail/30-anadyrrwgsoebxp.html-------------- 在Go语言中,原子包提供lower-level原子内存,这对实现同步算法很有帮助。Go语言中的CompareAndSwapInt64()函数用于对int64值执行比较和交换操作。此函数在原子包下定义。在这里,您需要导入“syn......
  • Go语言精进之路读书笔记第36条——使用atomic包实现伸缩性更好的并发读取
    atomic包提供了两大类原子操作接口:一类是针对整型变量的,包括有符号整型、无符号整型以及对应的指针类型;另一个类是针对自定义类型的。atomic包十分适合一些对性能十分敏感、并发量较大且读多写少的场合。如果要对一个复杂的临界区数据进行同步,那么首选依旧是sync包中的原语。36.......
  • java Atomic原子类&&常见并发容器
    Atomic原子类Atomic原子类介绍Atomic翻译成中文是原子的意思。在这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。并发包 java.util.concurrent 的原......
  • ZooKeeper's atomic broadcast protocol:Theory and practice 翻译
    ZooKeeper’satomicbroadcastprotocol:TheoryandpracticeZooKeeper的原子广播协议:理论和实践Andr´eMedeirosMarch20,2012Abstract摘要ApacheZooKeeperisadistributedcoordinationserviceforcloudcomputing,providingessentialsynchronizationandgrou......