相关疑难解决方法(0)

附加不是线程安全的?

我注意到如果我尝试在for循环中使用goroutine附加到切片,则会出现我会丢失/空白数据的情况:

destSlice := make([]myClass, 0)

var wg sync.WaitGroup
for _, myObject := range sourceSlice {
    wg.Add(1)
    go func(closureMyObject myClass) {
        defer wg.Done()
        var tmpObj myClass
        tmpObj.AttributeName = closureMyObject.AttributeName
        destSlice = append(destSlice, tmpObj)
    }(myObject)
}
wg.Wait()
Run Code Online (Sandbox Code Playgroud)

有时,当我打印所有AttributeNames时destSlice,一些元素是空字符串(""),有时,某些元素sourceSlice不存在destSlice.

我的代码是否有数据竞争,这是否意味着append多个goroutine并发使用它不是线程安全的?

concurrency append go slice goroutine

9
推荐指数
4
解决办法
8615
查看次数

标签 统计

append ×1

concurrency ×1

go ×1

goroutine ×1

slice ×1