慕田峪7331174
2022-10-04 16:36:05
我試圖同時打印,但無法弄清楚為什么它的串行,已經把代碼放在下面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 關注
- 79 瀏覽
添加回答
舉報
0/150
提交
取消