
package main
import (
"fmt"
"sync"
)
func main() {
// 创建两个通道用于同步
ch1 := make(chan struct{}, 1)
ch2 := make(chan struct{}, 1)
// 创建一个等待组,用于等待两个协程完成
var wg sync.WaitGroup
wg.Add(2)
// 第一个协程
go func() {
defer wg.Done()
for i := 1; i <= 100; i += 2 {
<-ch1
fmt.Printf("协程1: %d\n", i)
ch2 <- struct{}{}
}
}()
// 第二个协程
go func() {
defer wg.Done()
for i := 2; i <= 100; i += 2 {
<-ch2
fmt.Printf("协程2: %d\n", i)
ch1 <- struct{}{}
}
}()
// 启动第一个协程
ch1 <- struct{}{}
// 等待两个协程完成
wg.Wait()
}package main
import (
"fmt"
"sync"
)
func Print1(ch1 chan bool, ch2 chan bool, wg *sync.WaitGroup) {
defer wg.Done()
for {
<-ch1
fmt.Print("1")
ch2 <- true
}
}
func Print2(ch1 chan bool, ch2 chan bool, wg *sync.WaitGroup) {
defer wg.Done()
for {
<-ch2
fmt.Print("2")
ch1 <- true
}
}
func main() {
var wg sync.WaitGroup
ch1 := make(chan bool)
ch2 := make(chan bool)
wg.Add(2)
go Print1(ch1, ch2, &wg)
go Print2(ch1, ch2, &wg)
ch1 <- true
wg.Wait()
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。