go程阻塞

简介: go程阻塞

前言


记录一下我自己常用的go程阻塞方法, 确认go程完成


sync.WaitGroup


主要是用来监听go程执行完成

package main
import (
  "fmt"
  "time"
  "sync"
)
func a() {
  fmt.Println("a")
  time.Sleep(1 * time.Second)
}
func b() {
  fmt.Println("b")
  time.Sleep(2 * time.Second)
}
func test() {
  xf := sync.WaitGroup{}
  lis := []string{"a", "b"}
  for _, x := range lis {
    xf.Add(1)
    go func(x string) {
      defer xf.Done()
      switch x {
      case "a":
        a()
      case "b":
        b()
      }
    }(x)
  }
  xf.Wait()
}
func main() {
  test()
}

for循环读取chan


用读取chan的方式来阻塞等待go程结束, 也可以把go程的结果放到chan里


package main
import (
  "fmt"
  "time"
)
func a() {
  fmt.Println("a")
  time.Sleep(1 * time.Second)
}
func b() {
  fmt.Println("b")
  time.Sleep(2 * time.Second)
}
func test() {
  task := make(chan interface{})
  lis := []string{"a", "b"}
  for _, x := range lis {
    go func(x string) {
      switch x {
      case "a":
        a()
      case "b":
        b()
      }
      task <- nil
    }(x)
  }
  for a := 0; a < len(lis); a++ {
    mess := <-task
    fmt.Println(mess)
  }
}
func main() {
  test()
}
目录
相关文章
|
6月前
|
资源调度 监控 Go
|
Go
Go channel被关闭时的广播机制,以及遍历未关闭channel时会导致死锁阻塞问题
Go channel被关闭时的广播机制,以及遍历未关闭channel时会导致死锁阻塞问题
172 0
|
6天前
|
安全 网络协议 Go
Go语言网络编程
【10月更文挑战第28天】Go语言网络编程
94 65
|
6天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
28 13
|
2天前
|
测试技术 Go
go语言中测试工具
【10月更文挑战第22天】
10 4
|
2天前
|
SQL 关系型数据库 MySQL
go语言中数据库操作
【10月更文挑战第22天】
12 4
|
2天前
|
缓存 前端开发 中间件
go语言中Web框架
【10月更文挑战第22天】
13 4
|
6天前
|
网络协议 安全 Go
Go语言的网络编程基础
【10月更文挑战第28天】Go语言的网络编程基础
23 8
|
5天前
|
Go
go语言的复数常量
【10月更文挑战第21天】
18 6
|
5天前
|
Go
go语言的浮点型常量
【10月更文挑战第21天】
13 4