在此输入代码...// this works
package main
import (
"sync"
"sync/atomic"
"time"
)
var a int32
var done int32
var once sync.Once
func setup() {
a = 22222
// write
atomic.StoreInt32(&done, 1)
}
func doprint() {
if done == 0 { // if we use atomic to get value here, it's all fine. but
why? read a bool variable should be atomic
once.Do(setup)
}
// read
println("get", a)
}
func twoprint() {
go doprint()
go doprint()
}
func main() {
twoprint()
time.Sleep(time.Hour)
}
i do a little change on https://golang.org/ref/mem incorrect useage
synchronization session.
it really bother me why this code have data race, i see this kind of code in
runtime.channel, it also just use channel.closed without lock.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/1ec5a62f-81fa-4ae4-8c20-18b533cb2207%40googlegroups.com.