第十八:go 并发 goroutine

server/2025/3/13 16:13:36/

channel 可以让多个goroutine 之间实现通信

Add方法调用时机:必须在goroutine 启动之前调用Add方法来增加计数器的值

如果在goroutine已经启动之后再调用Add,可能会导致Wait方法提前返回,因为计数器没有正确反映正在运行的goroutine的数量。把握住:Add()与Wait()保证在同一个函数中

golang】 WaitGroup使用注意事项_golang sync.waitgroup使用的坑-CSDN博客

package mainimport ("fmt""sync"
)// 声明全局等待组变量
var wg sync.WaitGroupfunc hello() {fmt.Println("hello")wg.Done() // 告知当前goroutine完成
}func main() {wg.Add(1) // 登记1个goroutinego hello()fmt.Println("你好")wg.Wait() // 阻塞等待登记的goroutine完成
}

这里定义 wg.add(1000)  这里是事先 先定义好

如果是在 go func(i  int)  里面 就应该是 wg.add(1) ,意思每次循环加1

下面这个实例也是 匿名函数的 goroutine 使用《错误实例》

Add方法调用时机:必须在goroutine 启动之  // 前调用Add方法来增加计数器的值

       var wg sync.WaitGroup// 错误示例,在goroutine启动后才调用Add// 应该在这里调用 :wg.Add(1)go func() {wg.Add(1)  // 这个是错误实例 wg.Add(1) Add方法调用时机:必须在goroutine 启动之            // 前调用Add方法来增加计数器的值fmt.Println("Goroutine is running")wg.Done()}()wg.Wait()

   package mainimport ("fmt""sync")func worker(wg *sync.WaitGroup) {defer wg.Done()fmt.Println("Worker is running")}func main() {var wg sync.WaitGroupwg.Add(1)// 传递指针worker(&wg)wg.Wait()}


http://www.ppmy.cn/server/174660.html

相关文章

【安卓逆向】安卓病毒介绍及其简单案例分析

目录 引言 一、Android 病毒介绍及分析方法 1.1 Android 病毒预览 1.2 Android 病毒分析必备知识 1.3 Android 病毒的常见类型及恶意行为 1.3.1 常见病毒类型 1.3.2 常见病毒行为 1.4 病毒激活条件 1.5 Android 病毒的传播方式 1.6 Android 病毒分析的一般方法 二…

Linux练级宝典->动态库和静态库

动静态库的原理 我们知道可执行文件前的4步骤 预编译->编译->汇编->链接 预处理: 完成头文件展开、去注释、宏替换、条件编译等,最终形成xxx.i文件。编译: 完成词法分析、语法分析、语义分析、符号汇总等,检查无误后将…

《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》

在科技飞速发展的今天,量子计算与经典算法的融合成为了前沿领域的焦点。DeepSeek-M8的“量子神经网络混合架构”,宛如一把钥匙,开启了经典算法与量子计算协同推理的全新大门,为诸多复杂问题的解决提供了前所未有的思路。 量子计算…

MySQL中 IN 到底走不走索引?

文章目录 前言数据库表结构查询sqlEXPLAIN介绍EXPLAIN 的输出每列解释 强制走索引查询时添加条件(复合索引字段)查询小时查询分钟 总结 前言 在 MySQL 中,IN 语句是否能够利用索引取决于多个因素,包括但不限于查询的具体形式、表的统计信息、索引的选择…

使用expect工具实现远程批量修改服务器密码

使用expect工具实现远程批量修改服务器密码 linux服务器安装Expect工具 1、首先查看系统中是否有安装expect。 # whereis expect 2、Expect工具是依赖tcl的,需要先安装tcl #wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz …

LuaJIT 学习(1)—— LuaJIT介绍

文章目录 介绍Extensions Modulesbit.* — Bitwise operationsffi.* — FFI libraryjit.* — JIT compiler controlC API extensionsProfiler Enhanced Standard Library Functionsxpcall(f, err [,args...]) passes arguments例子: xpcall 的使用 load*() handle U…

利用java实现数据分析

1 问题 在日常生活中,对于数据的处理,为了使数据更加直观,我们可以使用柱状图,饼图,折线图等来呈现,同时也可以对数据直接进行一些处理,那怎样用java来处理这类问题呢? 2 方法 代码清…

emacs使用mongosh的方便工具发布

github项目地址: GitHub - csfreebird/emacs_mongosh: 在emacs中使用mongosh快速登录mongodb数据库 * 用途 在emacs中使用mongosh快速登录mongodb数据库, 操作方法: M-x mongosh, 输入数据库名称,然后就可以自动登录,前提是你已经配置好了…