首页 > 其他分享 >golang之 sync.WaitGroup

golang之 sync.WaitGroup

时间:2022-11-06 10:14:10浏览次数:57  
标签:wg WaitGroup defer fmt chan sync golang func

package main

import (
"fmt"
"sync"
)
func main() {
var ch1, ch2, ch3 = make(chan struct{}), make(chan struct{}), make(chan struct{})
var wg sync.WaitGroup
wg.Add(3)
go func(s string) {
defer wg.Done()
for i := 1; i <= 10; i++ {
<- ch1
fmt.Print(s)
ch2 <- struct{}{}
}
<- ch1
}("A")
go func(s string) {
defer wg.Done()
for i := 1; i <= 10; i++ {
<- ch2
fmt.Print(s)
ch3 <- struct{}{}
}
}("B")
go func(s string) {
defer wg.Done()
for i := 1; i <= 10; i++ {
<- ch3
fmt.Println(s)
ch1 <- struct{}{}
}
}("C")
ch1 <- struct{}{}
wg.Wait()
}

标签:wg,WaitGroup,defer,fmt,chan,sync,golang,func
From: https://www.cnblogs.com/cheyunhua/p/16861968.html

相关文章

  • golang-gin-gorm-viper实现数据简单的增删改查
    目录结构:配置文件:app:addr:127.0.0.1:8888mysql:host:172.xx.xx.xxport:3306user:rootpassword:rootdatabase:ginenable:truegorm:......
  • 线程安全问题和synchronized关键字
    当多线程对共享变量有读写操作时,可能会产生指令交错,这样就会有线程安全问题,所以产生线程安全问题有两个前提存在在多个线程间共享的变量对共享变量有读写操作,如果都是......
  • 如何在proto3中用上golang对应的interface{}类型
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯首先,我希望所有golang中用于http请求响应的结构,都使用proto......
  • linux服务器项目迁移非常好用的工具scp和rsync
    linux系统下一般都安装了,启用一下就可以了(1):编辑配置文件 #sudovi/etc/default/rsync#ubuntu #vi/etc/xinetd.d/rsync#centoscentos:把disable=yse改为no......
  • synchronized关键字
    Java中的每一个对象都可以作为锁。具体表现为以下3种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。对于同步方法块,锁是Synchonized括......
  • 关于 线程模型中经常使用的 __sync_fetch_and_add 原子操作的性能
    最近从kvell这篇论文中看到一些单机存储引擎的优秀设计,底层存储硬件性能在不远的未来可能不再是主要的性能瓶颈,反而高并发下的CPU可能是软件性能的主要限制。像BPS/AEP/Op......
  • golang 离线使用模块
    修改go.modmoduletcpgo1.17require( gitlab.xxx.test/dto/appv0.0.0-20220929075345-361eddc7a846 gitlab.xxx.test/dto/gatewayv0.0.0-20221012065303-c57......
  • 如何判断Javascript函数是否是Async函数
     zhangfisher发布于 2021-04-13判断Javascript函数是否是Async函数有好几种方法:调用Object.prototype.toString.call(asyncfunction(){}),如果返回[objectAsy......
  • golang fmt.Ssanf详解
    Golangfmt.Sscanf()实例讲解时间:2022-04-07本文章向大家介绍Golangfmt.Sscanf()实例讲解,主要分析其语法、参数、返回值和注意事项,并结合实例形式分析了其使用技巧,希望通......
  • 协程的async使用
    async与launch一样都是开启一个协程,但是async会返回一个Deferred对象,该Deferred也是一个job async函数类似于launch函数.它启动了一个单独的协程,这是一个轻量级的线程......