我在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 回答
- 2 回答
- 0 关注
- 236 浏览
添加回答
举报
0/150
提交
取消