Yes like Jan previously said. It is the very use case WaitGroup was developed for.
On Sun, Aug 21, 2016, 15:45 T L <tapir....@gmail.com> wrote: > > > On Saturday, August 20, 2016 at 2:29:41 PM UTC+8, Yulrizka wrote: >> >> Dear gophers >> >> I have discussion with my colleague about this code >> >> >> func process() *foo { >> var result *foo >> >> var wg sync.WaitGroup >> wg.Add(1) >> go func() { >> defer wg.Done() >> result = &foo{1} >> }() >> >> wg.Wait() >> >> return result >> } >> >> He argues that this is heap race condition. >> the result variable which lives on the heap of the go routine is not >> guaranteed to be synced to the result on the process func's thread. >> The better approach would be using a channel instead. I may agree with >> him that probably using channel is better. >> But I would like to understand the reasoning behind that. >> > > If the program is not race free, then what is the meaningfulness of > WaitGroup? > > > > >> >> I thought that `wg.Wait()` guaranteed that the process func's thread wait >> until go func is finsihed and sync everything so that the result variable >> is safe to return. >> >> Probably I'm missing some knowledge about how go routine work. >> >> 1. Does the process func thread has separate heap than the go func? If so >> how does is sync? >> 2. From I read so far, when go routine needed a bigger stack, it >> allocates memory from the heap. So what happened for object that is >> allocated inside of the go routine once the go routine returns? >> >> I there article of source that go into details about this I would love to >> read it :) >> >> Warm regards, >> > -- > 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. > -- 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.