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 <rob1...@gmail.com> 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 golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.