记录一个golang多线程协作

本文记录了一个使用Go语言(golang)进行多线程协作的问题及改进方案。在goroutine A、B、C与主进程M的交互中,通过channel进行通信,以实现主进程捕捉异常并等待所有子线程完成。原问题在于主进程可能在子线程B未完成前退出,导致B的错误未被捕捉。为解决此问题,采用了共享once函数来确保close chan操作仅执行一次,从而确保主进程正确等待所有子线程结束。
摘要由CSDN通过智能技术生成

目标

我们有goroutine A,B,C以及主进程M
A,B,C和M通过errorchfinishChsingalCh来互动, 从而实现M捕捉A,B,C中的异常,接受A,B,C全部完成的信号,或者是用户命令行的ctrl+C
M需要等待A,B,C的结果并且M需要自旋等待,

	for {
   
		select {
   
		case err = <- ErrorCh:
			fmt.Println("Error msg")
			return err
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值