On Friday, July 19, 2019 at 1:01:27 AM UTC+8, Ian Lance Taylor wrote: > > On Thu, Jul 18, 2019 at 8:35 AM T L <tapi...@gmail.com <javascript:>> > wrote: > > > > For example: > > > > type Page struct { > > views uint32 > > } > > > > func (page *Page) SetViews(n uint32) { > > atomic.StoreUint32(&page.views, n) > > } > > > > func (page *Page) Views() uint32 { > > return atomic.LoadUint32(&page.views) > > } > > > > Keith Randall and Ian Lance Taylor said that atomic.Load is a > memory_order_acquire > > and atomic.Store is memory_order_release, so there is no memory order > guarantees > > between the following two calls, I think: > > > > atomic.StoreUint32(&page.views, n) > > atomic.LoadUint32(&page.views) > > > > In other words, the load result might not reflect the latest value of > page.views. > > In these kinds of discussions it's hard to know what "latest value" > means. But in general an atomic load will see any atomic store that > preceded it in absolute time. The difference between load-acquire and > sequentially-consistent-load is not with the atomic value itself; it's > with all other memory accesses. The LoadUint32 will see the > StoreUint32, but it may not see any other non-atomic memory stores > done before the StoreUint32. > > > > On the contrary, the memory order between the following two calls > > is guaranteed to be as their order shown in code. > > > > atomic.LoadUint32(&page.views) > > atomic.StoreUint32(&page.views, n) > > > > Is my understanding right? > > So, per above, not quite. > > And that said, see the more recent discussion on > https://golang.org/issue/5045, in which Russ argues that we should use > sequential consistency anyhow. > > Ian >
Thanks, Ian. I get it now. -- 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/f7039ec5-576a-4e8e-b347-9fdeb129a72f%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.