zoukankan      html  css  js  c++  java
  • Go语言协程并发---原子操作

    package main
    
    import (
    	"fmt"
    	"sync/atomic"
    )
    
    /*
    用原子来替换锁,其主要原因是:
    原子操作由底层硬件支持,而锁则由操作系统提供的API实现
    若实现相同功能,原子操作通常会更有效率
    */
    
    func main() {
    	var a int64 = 123
    
    	//保证将456赋值到a的地址中(期间a一定不会被其他人访问)
    	atomic.StoreInt64(&a, 456)
    	fmt.Println(a) //456
    
    	a = 123
    	new := atomic.AddInt64(&a, 2)
    	fmt.Println(a, new) //125 125
    
    	a = 123
    	old := atomic.SwapInt64(&a, 456)
    	fmt.Println(old, a) //123  456
    
    	a = 123
    	swapped := atomic.CompareAndSwapInt64(&a, 123, 456)
    	fmt.Println(swapped, a) //true  456
    
    	/*模拟a被并发修改了*/
    	a = 321
    	//确保a(原值123)在没有并发修改的情况下被重新赋值为456
    	swapped = atomic.CompareAndSwapInt64(&a, 123, 456)
    	fmt.Println(swapped, a) //false  321
    
    }
    

    输出:

    456
    125 125
    123 456
    true 456
    false 321
    

      

  • 相关阅读:
    求最大公约数
    1013
    实现页面的3D效果
    实现购物车的加减算法
    随机验证码
    深入理解jQuery中的ajax
    canvas粒子时钟
    node、express框架
    vue的增删改查
    实现点击a标签页面跳转后颜色高亮
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12776553.html
Copyright © 2011-2022 走看看