与 google go 中的频道共享资源

我在Google Go构建实时系统时正在研究该语言,我发现通过渠道共享资源有点混乱。我试图为了理解,让不同的goroutines人增加和减少共享值相同的次数,最终为 0。我知道我的代码是错误的,但我并没有真正掌握它。有人愿意解释这里有什么问题吗?


package main


import (

    . "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,但我希望它们彼此独立运行。


LEATH
浏览 237回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go