我试图同时打印,但无法弄清楚为什么它的串行,已经把代码放在下面package mainimport ( "fmt" "sync")func main() { fmt.Println("Hello, playground") var wg sync.WaitGroup wg.Add(2) go func(){ for i := 0; i < 4; i++ { if i%2 == 0 { fmt.Println("hi", i) } } wg.Done() }() go func() { for i := 0; i < 4; i++ { if i%2 != 0 { fmt.Println("g", i) } } wg.Done() }() wg.Wait()}期望值是 hi0 g1 hi2 g3但我得到从 g 1 从 g 3 hi 0 hi 2
1 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
如此小的函数不太可能演示并发性,因为第一个 goroutine 甚至可能在第二个函数开始之前或上下文切换发生之前完成。如果在循环中添加一个小的暂停,您将观察到交错:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(2)
go func() {
for i := 0; i < 4; i++ {
if i%2 == 0 {
fmt.Println("hi", i)
}
time.Sleep(10 * time.Millisecond)
}
wg.Done()
}()
go func() {
for i := 0; i < 4; i++ {
if i%2 != 0 {
fmt.Println("from g", i)
}
time.Sleep(10 * time.Millisecond)
}
wg.Done()
}()
wg.Wait()
}
- 1 回答
- 0 关注
- 80 浏览
添加回答
举报
0/150
提交
取消
