>> This expression: >> >> atomic.StoreUint32(&o.done, 1) >> >> does not just take the address of o.done. It also executes the >> StoreUint32 function, which is defined by the sync/atomic >> documentation to behave like '*o.done = 1'; i.e., it alters the value >> of o.done. > > > Respectfully I disagree, it store the value 1 at the memory address &o.done. > It has no defined effect on other occurrences of o.done in this, or other > goroutines if they have already loaded o.done. > > I agree that i'm still talking about registers and inlining; but if there > were no registers, inlining, caches, or other things which are not specified > by the language, then there would be no data races. So here we are.
Does your argument rely on atomic.StoreUint32 being special, or would you also say that this program is not defined to always print 2? https://play.golang.org/p/gk3c6X_JdmQ -- 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. For more options, visit https://groups.google.com/d/optout.