我试图了解当您对指针方法进行并发访问时会发生什么?
我有一个指针映射并产生了一些 go 例程。我将地图传递给每个 goroutine,每个 goroutine 将使用地图中的一个值。没有任何东西被写入地图,只是被读取。
地图很小,只有 4 个键,因此可能不止一个 go 例程会使用地图中的相同值。
问题是,当两个 go 例程调用同一个指针的方法时会发生什么?我会得到不可预测的结果吗?
编辑
示例:我正在取出地图部分,因为这不是我想要的问题。
我有foo
which 是一个类型的指针,MyStruct
这个结构有一个DoSomething
带参数的方法。在main
函数中,我创建了两个go routines
,它们都调用foo.DoSomething
传递不同的值。在这个例子中,第一个 go 例程比第二个例程要执行更大的计算(这里只使用睡眠时间来模拟计算)。同样,结构中没有任何变化我只是调用结构方法。foo.DoSomething
当第一个 go 例程仍在使用该方法时,我是否必须担心第二个 go 例程会调用该方法?
package main
import (
"log"
"time"
)
type MyStruct struct {
}
func (self *MyStruct) DoSomething(value int) {
log.Printf("%d Start", value)
calculation_time := time.Duration(value) * time.Second
log.Printf("%d Calculating", value, calculation_time)
time.Sleep(calculation_time)
log.Printf("%d Done", value)
}
func main() {
var foo = new(MyStruct)
go foo.DoSomething(5)
// is this method call a problem when the first one is still working?
go foo.DoSomething(2)
time.Sleep(time.Duration(6 * time.Second))
}