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.

Reply via email to