当每个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]