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()
}
目录
相关文章
|
5月前
|
资源调度 监控 Go
|
Go
Go channel被关闭时的广播机制,以及遍历未关闭channel时会导致死锁阻塞问题
Go channel被关闭时的广播机制,以及遍历未关闭channel时会导致死锁阻塞问题
163 0
|
13天前
|
Go
Go 语言循环语句
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
24 1
|
2天前
|
存储 Go 容器
深入探究Go语言中的数据结构
深入探究Go语言中的数据结构
10 3
|
12天前
|
Go 开发者
探索Go语言的并发之美
在Go语言的世界里,"并发"不仅仅是一个特性,它是一种哲学。本文将带你领略Go语言中goroutine和channel的魔力,揭示如何通过Go的并发机制来构建高效、可靠的系统。我们将通过一个简单的示例,展示如何利用Go的并发特性来解决实际问题,让你的程序像Go一样,轻盈而强大。
|
13天前
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
|
13天前
|
Go
go语言创建字典
go语言创建字典
|
14天前
|
安全 Go 数据处理
探索Go语言的并发之美:Goroutines与Channels
在Go语言的世界里,"并发"不仅仅是一个概念,它是一种生活的方式。本文将带你领略Go语言中Goroutines和Channels的魔力,它们是如何让并发编程变得既简单又高效。我们将通过一个简单的示例,展示如何使用这些工具来构建一个高性能的网络服务。
|
14天前
|
关系型数据库 Go 数据处理
高效数据迁移:使用Go语言优化ETL流程
在本文中,我们将探索Go语言在处理大规模数据迁移任务中的独特优势,以及如何通过Go语言的并发特性来优化数据提取、转换和加载(ETL)流程。不同于其他摘要,本文不仅展示了Go语言在ETL过程中的应用,还提供了实用的代码示例和性能对比分析。
|
14天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19