On Tuesday, September 5, 2017 at 12:20:02 PM UTC-4, T L wrote:
>
> IMO, I think this is a bug.
>
I mean it can be viewed as a bug for inconsistency.
But from the memory model view, it can also not be viewed as a bug.
>
> On Tuesday, September 5, 2017 at 12:16:56 PM UTC-4, T L wrote:
>>
>> BTW, the following one also prints 10.
>>
>> package main
>>
>> import (
>> "fmt"
>> "time"
>> )
>>
>> func main() {
>> var num = 10
>> var p = &num
>>
>> c := make(chan int)
>>
>> go func() {
>> c <- *p * 1 // with this line we will get 11 from channel c
>> //c <- num // with this line we will get 10 from channel c
>> }()
>>
>> time.Sleep(time.Second)
>> num++
>> fmt.Println(<-c)
>>
>> //fmt.Println(p)
>> }
>>
>> On Tuesday, September 5, 2017 at 12:13:51 PM UTC-4, T L wrote:
>>>
>>> The program is really racy, but the result is also really some
>>> counter-intuitive.
>>> The following program also print 10, which means evaluation of pointer
>>> dereference
>>> is some different to evaluation of other expressions in flow.
>>>
>>> package main
>>>
>>> import (
>>> "fmt"
>>> "time"
>>> )
>>>
>>> func main() {
>>> var num = 10
>>> var p = &num
>>>
>>> c := make(chan int)
>>>
>>> go func() {
>>> c <- func()int{return *p}() // with this line we will get 11
>>> from channel c
>>> //c <- num // with this line we will get 10 from channel c
>>> }()
>>>
>>> time.Sleep(time.Second)
>>> num++
>>> fmt.Println(<-c)
>>>
>>> fmt.Println(p)
>>> }
>>>
>>> On Monday, September 4, 2017 at 10:35:32 PM UTC-4, Jesse McNelis wrote:
>>>>
>>>> On Tue, Sep 5, 2017 at 10:34 AM, Marlon Che <[email protected]> wrote:
>>>> > Hi everyone!
>>>> > Please help me figure out the two different results of following
>>>> code:
>>>> >
>>>> > package main
>>>> >
>>>> > import (
>>>> > "fmt"
>>>> > "time"
>>>> > )
>>>> >
>>>> > func main() {
>>>> > var num = 10
>>>> > var p = &num
>>>> >
>>>> > c := make(chan int)
>>>> >
>>>> > go func() {
>>>> > c <- *p // with this line we will get 11 from channel c
>>>> > //c <- num // with this line we will get 10 from channel c
>>>> > }()
>>>> >
>>>> > time.Sleep(2 * time.Second)
>>>> > num++
>>>> > fmt.Println(<-c)
>>>> >
>>>> > fmt.Println(p)
>>>> > }
>>>>
>>>> You have a data race, what value you get from dereferencing p is
>>>> undefined, it could be 10, it could be 11, it could wipe your
>>>> harddrive or launch the missiles.
>>>>
>>>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.