前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go 原子操作函数案例(并发竞争状态的解决方式)

go 原子操作函数案例(并发竞争状态的解决方式)

作者头像
贵哥的编程之路
发布2024-03-22 08:36:42
710
发布2024-03-22 08:36:42
举报
代码语言:javascript
复制
package main

import (
    "fmt"
    "sync" // 同步操作
    "sync/atomic" // 提供原子操作函数,用于并发安全地操作共享变量。
)

var counter int64//计数器
var wg sync.WaitGroup//WaitGroup 主要用于协调多个 goroutine 的执行,确保在所有 goroutine 都完成后再继续执行接下来的操作。
func incr(){
	atomic.AddInt64(&counter,1)//+1
	wg.Done()//-1。+1 -1代表一个go的执行完毕
}
func main() {
   wg.Add(2)//表示需要等待两个 goroutine 完成。
   go incr()
   go incr()
   wg.Wait()//调用 wg.Wait()// 阻塞主 goroutine,直到所有 goroutine 执行完成。
   fmt.Println("值:", atomic.LoadInt64(&counter))
   
}

//并发竞争
//会出现数据不一致  程序崩溃  逻辑错误等问题。因为没有同步机制的话。例如,两个 goroutine 同时读取变量、修改变量并写回,但最终结果可能取决于它们之间的执行顺序,而不是程序的代码顺序。
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com