zoukankan      html  css  js  c++  java
  • [Go] golang原子函数锁住共享资源

    1.atomic包里的几个函数以及sync包里的mutex类型,提供了解决方案
    2.原子函数能够以很底层的加锁机制来同步访问整型变量和指针
    3.atomic.AddInt64(&counter, 1)的原理是强制同一时刻只能有一个goroutine运行并完成这个加法操作

    package main
    
    import (
    	"fmt"
    	"runtime"
    	"sync"
    	"sync/atomic"
    )
    
    var (
    	//全局变量
    	counter int64
    	//计数信号量
    	wg sync.WaitGroup
    )
    
    func main() {
    	fmt.Println("hello")
    	//计数加2,等待两个goroutine
    	wg.Add(2)
    	go incCounter()
    	go incCounter()
    	//主goroutine等待子goroutine结束
    	wg.Wait()
    	fmt.Println("最终counter值:", counter)
    }
    
    //增加counter的值函数
    func incCounter() {
    	//函数结束,减小信号量
    	defer wg.Done()
    	for count := 0; count < 2; count++ {
    		//安全的对counter加1
    		atomic.AddInt64(&counter, 1)
    		//强制调度器必须切换
    		runtime.Gosched()
    	}
    }
    

      

  • 相关阅读:
    git 合并两个仓库
    git 合并两个仓库
    操作系统
    域名
    域名
    .NET Framework基本概念
    .NET Framework基本概念
    拓扑排序
    PHP 数组
    PHP Switch 语句
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10385667.html
Copyright © 2011-2022 走看看