我在Google Go構建實時系統時正在研究該語言,我發現通過渠道共享資源有點混亂。我試圖為了理解,讓不同的goroutines人增加和減少共享值相同的次數,最終為 0。我知道我的代碼是錯誤的,但我并沒有真正掌握它。有人愿意解釋這里有什么問題嗎?package mainimport ( . "fmt" . "runtime")func increment(c chan int) { for x := 0; x < 10; x++ { a := <-c a++ c <- a }}func decrement(c chan int) { for x := 0; x < 10; x++ { a := <-c a-- c <- a }}func main() { GOMAXPROCS(NumCPU()) c := make(chan int) go increment(c) go decrement(c) Println(<-c)}我可以使用互斥鎖或信號量,類似于我使用Cor 的方式Python,盡管我想利用Go.**更新添加會WaitGroup改變程序流程嗎?我加了一個WaitGroup,效果很好。雖然,我Done()在整個 for 循環之后添加了該函數,那么整個循環會在increment之前運行decrement嗎?我有點希望它們盡可能地“并行”運行,我知道只有一個例程可以訪問 I,但我希望它們彼此獨立運行。
- 2 回答
- 0 關注
- 263 瀏覽
添加回答
舉報
0/150
提交
取消