美文网首页
golang 原子操作

golang 原子操作

作者: 缘尤会 | 来源:发表于2021-01-20 20:17 被阅读0次

在众多的同步工具中,真正能够保证原子性执行的只有原子操作(atomic operation)。原子操作在进行的过程中是不允许中断的。
更具体地说,正是因为原子操作不能被中断,所以它需要足够简单,并且要求快速。你可以想象一下,如果原子操作迟迟不能完成,而它又不会被中断,那么将会给计算机执行指令的效率带来多么大的影响。因此,操作系统层面只对针对二进制位或整数的原子操作提供了支持。
Go语言的原子操作当然是基于CPU和操作系统的,所以它也只针对少数数据类型的值提供了原子操作函数。这些函数都存在于标准库代码包sync/atomic中。
sync/atomic包中提供了几种原子操作?可操作的数据类型又有哪些?包中提供了几种原子操作?可操作的数据类型又有哪些?
这里的典型回答是:这里的典型回答是:sync/atomic包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称CAS)、加载(load)、存储(store)和交换(swap)。
这些函数针对的数据类型并不多。但是,对这些类型中的每一个,sync/atomic包都会有一套函数给予支持。
这些数据类型有:int32、int64、uint32、uint64、uintptr,以及unsafe包中的Pointer。不过,针对unsafe.Pointer类型,该包并未提供进行原子加法操作的函数。
此外,sync/atomic包还提供了一个名为Value的类型,它可以被用来存储任意类型的值

相关文章

  • golang 原子操作

    在众多的同步工具中,真正能够保证原子性执行的只有原子操作(atomic operation)。原子操作在进行的...

  • golang 系列:atomic 原子操作

    sync/atomic 介绍 当我们想要对某个变量并发安全的修改,除了使用官方提供的 mutex[https://...

  • golang锁和原子操作

    锁是什么? 锁是用于解决隔离性的一种机制某个协程(线程)在访问某个资源时先锁住,防止其他协程的访问,等访问完毕解锁...

  • Go 原子操作

    本文讲解 golang 中 sync.atomic 的常见操作 atomic 提供的原子操作能够确保任一时刻只有一...

  • Golang sync.atomic 相比 sync.Mutex

    sync.atomic Golang 标准库中的 sync/atomic 为开发者提供了对几种简单类型的原子操作函...

  • 第10章 内核同步方法

    一、原子操作 原子操作可以操作指令以原子的方式执行,执行过程不会被打断。 1.1 原子整数操作 针对整数的原子操作...

  • Java自学-多线程 原子访问

    多线程 原子访问 步骤 1 : 原子性操作概念 所谓的原子性操作即不可中断的操作,比如赋值操作 原子性操作本身是线...

  • Go语言 原子操作

    原子操作就是不可中断的操作,外界是看不到原子操作的中间状态,要么看到原子操作已经完成,要么看到原子操作已经结束。在...

  • 高并发(12)-原子操作类的使用

    @TOC 前言 上篇文章讲解了什么是原子操作,并且怎么实现原子操作。今天就讲一下原子的操作类 什么是原子操作类 为...

  • 11--多线程探索--锁分析

    一、线程相关概念 1.1 原子操作 原子和原子操作 原子操作:不可分割的操作。该操作一定是在同一个CPU时间片中完...

网友评论

      本文标题:golang 原子操作

      本文链接:https://www.haomeiwen.com/subject/epclzktx.html