当每个goroutine在一个slice上工作并指向同一基础数组但没有重叠时,从多个goroutine访问同一数组是否安全?

喜欢:

var arr [100]int
sliceA := arr[:50]
sliceB := arr[50:]

go WorkOn(sliceA)
go WorkOn(sliceB)

试想一下“WorkOn”会做一些花哨的事情。

最佳答案

只要您可以保证这些区域不会重叠,就可以了。

保证我的意思是:从事sliceA工作的人,不应被允许做sliceA = append(sliceA, a, b, c)。因为那样,它将开始进入sliceB的领土。

与此相关的是Go 1.2的一些文档:
这涉及一个新的语言元素: 3索引 slice :


var array [10]int
slice := array[2:4]


slice = array[2:4:7]

07-24 21:16