go语言多线程同步 (结束)方法4种

本文详细介绍了Go语言中的四种同步方式:全局变量、sync.WaitGroup、通道和上下文(context)。讲解了如何通过这些机制等待或强制多个线程结束,特别强调了在不同场景下的适用性,如简单的线程停止、复杂同步操作(如超时控制)等。并提供了相关代码示例链接作为参考。
摘要由CSDN通过智能技术生成

狭隘的同步就是等待或强制 多个线程结束后,再运行后续代码

go语言常用的同步方式,有4种:

默认用第二种,等待所有程序结束
如果只是简单的手动停止多个线程,可以用第一种和第三种方法
如果需要复杂的同步方法,例如超时停止,可以用第四种

  • 第一种 用全局变量 [条件触发] 多个线程结束
    初始化全局变量A=false
    每个线程方法 中添加对变量A的判断
    如果变量A=true, return 结束线程

  • 第二种 用 sync.WaitGroup [等待] 多个线程结束
    wg.add(1) 用于线程中或线程外,表示线程启动
    wg.Done() 用于线程中,表示线程结束
    wg.Wait() 用于线程外, 等待所有线程全部结束

  • 第三种 用通道(chan)方式 [通知] 多个线程结束
    利用通道收到信号后,调用 return 退出 线程

  • 第四种 用上下文(context 包 )方式 [强制] 多个线程结束
    WithCancel() 可以手动控制多个线程结束
    WithTimeout 这个表示是超时自动结束,是多少时间后自动取消Context 结束线程的意思
    WithDeadline() 等同于WithTimeout+WithCancel 即可以定时结束多个线程,也可以手动控制多个线程结束
    –WithValue 与线程结束无关,主要是在线程间传递 参数

具体代码网上有很多,例如可以参考

https://www.sdk.cn/details/vOVl36qOLmnN8E9WXJ

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值