Can I think the atomic store and load operation in go are equivalent to the atomic load and store with *memory_order_relaxed* in c++?
On Sunday, October 22, 2017 at 12:12:19 PM UTC-4, T L wrote: > > And how about this one. Also no guarantees to always print 1? > > package main > > import "fmt" > import "sync/atomic" > import "runtime" > > func main() { > runtime.GOMAXPROCS(1) > var a, b int32 = 0, 0 > > go func() { > atomic.AddInt32(&a, 1) > atomic.AddInt32(&b, 1) > }() > > for { > if n := atomic.LoadInt32(&b); n == 1 { > fmt.Println(atomic.LoadInt32(&a)) // always print 1? > break > } > runtime.Gosched() > } > } > > On Sunday, October 22, 2017 at 9:59:11 AM UTC-4, T L wrote: >> >> So the Go 1 memory model really make no guarantees that the following >> program will print 1? >> >> package main >> >> import "fmt" >> import "sync/atomic" >> import "runtime" >> >> func main() { >> runtime.GOMAXPROCS(1) >> var a, b int32 = 0, 0 >> >> go func() { >> a = 1 >> atomic.AddInt32(&b, 1) >> }() >> >> for { >> if n := atomic.LoadInt32(&b); n == 1 { >> fmt.Println(a) // always print 1? >> break >> } >> runtime.Gosched() >> } >> >> On Sunday, October 22, 2017 at 6:33:42 AM UTC-4, T L wrote: >>> >>> >>> >>> On Sunday, October 22, 2017 at 5:55:54 AM UTC-4, Jan Mercl wrote: >>>> >>>> On Sun, Oct 22, 2017 at 9:19 AM T L <tapi...@gmail.com> wrote: >>>> >>>> > why? >>>> >>>> The OP code with line numbes: https://play.golang.org/p/4fmiWqDDc1 >>>> >>>> The main goroutine busy loops at lines 15-20. Because of that the >>>> goroutine at line 10 may never run and thus line 17 may never get >>>> executed. >>>> If so, line 18 and thus also lines 27 and above may also never get >>>> executed. >>>> >>>> -- >>>> >>>> -j >>>> >>> >>> Aha, yes, if GOMAXPROCS is 1, then the main goroutine will become greedy. >>> >>> >> -- 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.