• go实现主线程等待子线程都运行完再退出


    方式一

    package main
    import (
        "fmt"
    )
    func main() {
        ch := make(chan struct{})
        count := 2 // count 表示活动的协程个数
        go func() {
            fmt.Println("Goroutine 1")
            ch <- struct{}{} // 协程结束,发出信号
        }()
        go func() {
            fmt.Println("Goroutine 2")
            ch <- struct{}{} // 协程结束,发出信号
        }()
        for range ch {
            // 每次从ch中接收数据,表明一个活动的协程结束
            count--
            // 当所有活动的协程都结束时,关闭管道
            if count == 0 {
                close(ch)
            }
        }
    }

    方式二

    package main
     import (
       "fmt"
      "sync"
     )
     func main() {
      var wg sync.WaitGroup
      wg.Add(2) // 因为有两个动作,所以增加2个计数
      go func() {
        fmt.Println("Goroutine 1")
        wg.Done() // 操作完成,减少一个计数
      }()
      go func() {
        fmt.Println("Goroutine 2")
        wg.Done() // 操作完成,减少一个计数
      }()
      wg.Wait() // 等待,直到计数为0
    }
  • 相关阅读:
    6种基本排序(C++实现)
    关于 ^ 异或 及 无中间变量进行交换
    清理C盘旧驱动
    sqlmap基本使用
    http头部注入
    waf绕过注入
    mysql报错注入
    Burp Suite工具使用
    mysql注入
    Linux网络配置
  • 原文地址:https://www.cnblogs.com/wujf/p/10881944.html
Copyright © 2020-2023  润新知