happens-before in this case would only guarantee 0, not 1. e.g. change the initializer to x = 3, then 3 must be guaranteed to be seen rather than the default value of 0
> On Dec 2, 2022, at 8:12 AM, burak serdar <bser...@computer.org> wrote: > > The way I read the memory model, this program can print 01, 00, and 11, but > not 10. This is because goroutine creation creates a synchronized before > relationship between x=1 and x=0, so even though there is a race, x=0 happens > before x=1. > > On Fri, Dec 2, 2022 at 6:56 AM のびしー <nobishi...@gmail.com > <mailto:nobishi...@gmail.com>> wrote: > > I believe your example is basically equivalent to the ones in > > https://go.dev/ref/mem#badsync <https://go.dev/ref/mem#badsync> which also > > contains an explanation of how the memory model implies this > > @Wagner <> > Thanks for your opinion, I think so too. I was not confident that my example > is equivalent to https://go.dev/ref/mem#badsync > <https://go.dev/ref/mem#badsync>, since my example reads from the same > variable. > > > > Programs that modify data being simultaneously accessed by multiple > > goroutines must serialize such access. > @peterGo <> > > I know that my example has data races. But the Go Memory Model guarantees a > limited number of outcomes for programs with races(unless runtime reports the > race and terminates). My question is about the limited outcomes. > <> > 2022年12月2日(金) 22:02 Axel Wagner <axel.wagner...@googlemail.com > <mailto:axel.wagner...@googlemail.com>>: > I believe your example is basically equivalent to the ones in > https://go.dev/ref/mem#badsync <https://go.dev/ref/mem#badsync> which also > contains an explanation of how the memory model implies this (or rather, how > it does not imply the opposite). > > On Fri, Dec 2, 2022, 13:11 のびしー <nobishi...@gmail.com > <mailto:nobishi...@gmail.com>> wrote: > Hello, I have another question regarding the Go Memory Model. > > (1) Can this program print "10", according to the Memory Model? > (2) If that is forbidden, which part of the Go Memory Model excludes such > behavior? > > https://go.dev/play/p/Fn5I0fjSiKj <https://go.dev/play/p/Fn5I0fjSiKj> > > ```go > package main > > var x int = 0 > > func main() { > go func() { > x = 1 > }() > print(x) // first read: 1 > print(x) // second read: 0 > } > ``` > > I draw a picture of the happens-before relation of this program here: > > https://gist.github.com/nobishino/8150346c30101e2ca409ed83c6c25add?permalink_comment_id=4388680#gistcomment-4388680 > > <https://gist.github.com/nobishino/8150346c30101e2ca409ed83c6c25add?permalink_comment_id=4388680#gistcomment-4388680> > > I think the answer to (1) is yes. > Both reads are concurrent with x = 1, so each read can observe both x = 0 and > x = 1. > And there is no constraint between the results of the first read and the > second read. > So the second read can observe x = 0 even if the first read observes x = 0. > > But I'm not very sure. Is this understanding correct? > > -- > 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 golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAGoET5HyPxEhBETGWNPuYpDgXbm0JM3jeaKFdoQdtc5eGUR0Uw%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CAGoET5HyPxEhBETGWNPuYpDgXbm0JM3jeaKFdoQdtc5eGUR0Uw%40mail.gmail.com?utm_medium=email&utm_source=footer>. > > -- > 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 golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAGoET5Fk6Wwd7JOJOY%3DJVix9NymsP3yJ_P%2BaDPgtPTorL-X_Wg%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CAGoET5Fk6Wwd7JOJOY%3DJVix9NymsP3yJ_P%2BaDPgtPTorL-X_Wg%40mail.gmail.com?utm_medium=email&utm_source=footer>. > > -- > 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 golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAMV2Rqphhx8S0sZDv%3Dj1rskhPvCBstzLo%2BAscz5X7pMnNFzWNQ%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CAMV2Rqphhx8S0sZDv%3Dj1rskhPvCBstzLo%2BAscz5X7pMnNFzWNQ%40mail.gmail.com?utm_medium=email&utm_source=footer>. -- 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 golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/BCECAAC1-A822-4A79-BDA5-F0D7BEBCF5DC%40ix.netcom.com.