Go - Atomic

Go - Atomic 首页 / Golang入门教程 / Go - Atomic

通过同步/原子程序包,原子变量用于管理状态并避免争用条件。原子计数器可以通过多个go例程进行访问。

原子变量示例

package main
import (
   "sync"
   "time"
   "math/rand"
   "fmt"
   "sync/atomic"
)
var wait sync.WaitGroup
var count int64
func  increment(s string)  {
   for i :=0;i<10;i++ {
      time.Sleep(time.Duration((rand.Intn(3)))*time.Millisecond)
      atomic.AddInt64(&count,1)
      fmt.Println(s,i,"Count ->",count)
   }
   wait.Done()
}
func main(){
   wait.Add(2)
   go increment("foo: ")
   go increment("bar: ")
   wait.Wait()
   fmt.Println("last count value " ,count)
}

输出:

无涯教程网

foo:  0 Count -> 1
foo:  1 Count -> 2
bar:  0 Count -> 3
bar:  1 Count -> 4
bar:  2 Count -> 5
foo:  2 Count -> 6
bar:  3 Count -> 7
bar:  4 Count -> 8
bar:  5 Count -> 9
foo:  3 Count -> 10
bar:  6 Count -> 11
bar:  7 Count -> 12
foo:  4 Count -> 13
foo:  5 Count -> 14
bar:  8 Count -> 15
bar:  9 Count -> 16
foo:  6 Count -> 17
foo:  7 Count -> 18
foo:  8 Count -> 19
foo:  9 Count -> 20
last count value  20

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Android开发高手课 -〔张绍文〕

程序员的数学基础课 -〔黄申〕

性能工程高手课 -〔庄振运〕

重学线性代数 -〔朱维刚〕

流程型组织15讲 -〔蒋伟良〕

业务开发算法50讲 -〔黄清昊〕

云计算的必修小课 -〔吕蕴偲〕

零基础学Python(2023版) -〔尹会生〕

后端工程师的高阶面经 -〔邓明〕

好记忆不如烂笔头。留下您的足迹吧 :)