在https://golang.org/ref/mem#tmp_10中,该程序并不安全,如下所示,无法保证打印最新的消息
type T struct {
msg string
}
var g *T
func setup() {
t := new(T)
t.msg = "hello, world"
g = t
}
func main() {
go setup()
for g == nil {
}
print(g.msg)
}
在JAVA中,对于易失性g来说是可以的,我们必须使用rwmutex来保持在golang中打印最新的消息,如下所示?
type T struct {
msg string
rwlock sync.RWMutex
}
var g = &T{}
func setup() {
g.rwlock.Lock()
defer g.rwlock.Unlock()
g.msg = "hello, world"
}
func main() {
go setup()
printMsg()
}
func printMsg() {
g.rwlock.RLock()
defer g.rwlock.RUnlock()
print(g.msg)
}
牧羊人nacy
千巷猫影
相关分类