IMO, I think this is 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.