相关疑难解决方法(0)

Goroutines共享一个阵列通道:试图解决数据竞争问题

我尝试用并行的goroutine编写一个复杂的程序.这是我的第一个带有通道的程序;)每个goroutine返回一个数组,不幸的是,结果是"随机的".如果我运行10次程序,我有10个不同的结果:(

这是我的程序的过度简化,结果很好(可能因为它太简单了)但是当我用-race参数运行它时,有4个数据竞争.

我试过有一个close()函数,但它没有用.

你可以帮我找错吗?非常感谢你提前!

package main

import "fmt"
import "sync"
import "strconv"


func cat_strings(a int, b string) []string{
    var y []string

    j := strconv.Itoa(a)
    y = append(y, j)
    y = append(y, b)
    return y
}

func main() {
    var slice []string
    var wg sync.WaitGroup
    var x []string

    queue := make(chan []string, 10)

    wg.Add(10)
    for i := 0; i < 10; i++ {
        go func(i int) {
            defer wg.Done()
            x = cat_strings(i, "var")
            queue <- x
        }(i)

    }
    //close(queue)

    go func() …
Run Code Online (Sandbox Code Playgroud)

arrays parallel-processing channel go

0
推荐指数
1
解决办法
600
查看次数

标签 统计

arrays ×1

channel ×1

go ×1

parallel-processing ×1