Hi,
I did a quiz recently, but I'm having problem with the answer.
Quiz: https://github.com/smallnest/go-concurrent-quiz#-quiz-4
package doublecheck
import (
"sync"
)
type Once struct {
m sync.Mutex
done uint32
}
func (o *Once) Do(f func()) {
if o.done == 1 {
return
}
o.m.Lock()
defer o.m.Unlock()
if o.done == 0 {
o.done = 1
f()
}
}
Question
- A: can't compile
- B: can run that implemented the singleton pattern correctly
- C: can run but has not implemented the singleton pattern, function f
may run multi times.
- D: programms will be panic when use this Once concurrently.
Some other people and I think the answer is B, but the author says the
answer is C.
We think this implements happen-before, but the author doesn't think so.
Can anyone help to explain this?
Thanks!
<https://github.com/smallnest/go-concurrent-quiz#-quiz-5>
--
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/c09f9918-942d-4ca6-be21-e1d0ce49b071%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.