Go语言,用原子函数atomic避免资源竞争

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言,用原子函数atomic避免资源竞争相关的知识,希望对你有一定的参考价值。

下一步应该是互斥锁了。

package main

import (
	"fmt"
	"runtime"
	"sync"
	"sync/atomic"
)

var (
	counter int64
	wg sync.WaitGroup
)

func main() {
	wg.Add(2)
	
	fmt.Println("Create Goroutines")
	go incCounter(1)
	go incCounter(2)
	
	fmt.Println("Waiting To Finish")
	wg.Wait()
	
	fmt.Println("Final Counter:", counter)
}

func incCounter(id int) {
	defer wg.Done()
	for count := 0; count < 2; count++ {
		atomic.AddInt64(&counter, 1)
		runtime.Gosched()

	}
}

  技术分享

以上是关于Go语言,用原子函数atomic避免资源竞争的主要内容,如果未能解决你的问题,请参考以下文章

Go语言之通道

Go sync.atomic原子操作的学习

Gorm原子更新到增量计数器

C++ 原子操作 std::atomic<int>

go atomic包分析

[Go] golang的竞争状态