我有以下執行例程的 go 代碼。package mainimport ( "fmt" "time")func count(id int) { for i := 0; i < 10; i++ { fmt.Println(id, ":", i) time.Sleep(time.Millisecond * 1000) } }func main() { for i := 0; i < 10; i++ { go count(i) } time.Sleep(time.Millisecond * 11000)}我希望輸出是:1 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 01 : 12 : 13 : 14 : 1etc...但相反,我得到:0 : 06 : 07 : 05 : 08 : 09 : 03 : 02 : 04 : 01 : 05 : 16 : 17 : 11 : 18 : 1etc...為什么它們不是按照原始的順序,在外部 for 循環執行 count 方法?為什么某些計數方法不同步?
2 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
goroutine 何時執行是程序員無法控制的。如果您通過通道和 sync.WaitGroup 使用信號,您可以進行一些控制(例如讓一個 goroutine 等待另一個 goroutine 完成),但您無法控制 goroutines 的執行順序

阿波羅的戰車
TA貢獻1862條經驗 獲得超6個贊
正如其他人已經評論的那樣,goroutine 主要針對并發性。并發可以包含并行性和通信。如果你想控制他們的順序,你必須讓他們通過SIGNAL進行交流。例如,一個 goroutine 等待來自另一個 goroutine 的信號。請特別檢查 goroutine 和 channel。
- 2 回答
- 0 關注
- 179 瀏覽
添加回答
舉報
0/150
提交
取消