I find continuously adding and calling done on a waitgroup a bit odd. The waiting goroutine can continue as soon as the count is zero so there is a race between adds and dones.
On Sat, 4 Nov 2017, 10:01 , <2891132l...@gmail.com> wrote: > Thank you very much.Sorry I still have some question:what's the function > of wg? what does the sentense "wg.Add(2) " mean?? I found that if I change > 2 into 1,the result is differnet. > > 在 2017年11月3日星期五 UTC+8上午4:45:47,snmed写道: > >> Hi >> >> Here is the code: >> >> Version 1: >> package main >> >> import ( >> "fmt" >> "sync" >> ) >> >> var a string >> var once sync.Once >> >> func setup() { >> a = "hello,world\n" >> } >> func doprint() { >> once.Do(setup) >> fmt.Print(a) >> } >> func twoprint() <-chan struct{} { >> var wg sync.WaitGroup >> wg.Add(2) >> ch := make(chan struct{}) >> >> go func() { >> doprint() >> wg.Done() >> }() >> go func() { >> doprint() >> wg.Done() >> }() >> >> go func() { >> wg.Wait() >> close(ch) >> }() >> >> return ch >> } >> >> func main() { >> ch := twoprint() >> <-ch >> } >> >> >> Version 2: >> package main >> >> import ( >> "fmt" >> "sync" >> ) >> >> var a string >> var once sync.Once >> >> func setup() { >> a = "hello,world\n" >> } >> func doprint() { >> once.Do(setup) >> fmt.Print(a) >> } >> func twoprint() { >> var wg sync.WaitGroup >> wg.Add(2) >> >> go func() { >> doprint() >> wg.Done() >> }() >> go func() { >> doprint() >> wg.Done() >> }() >> >> wg.Wait() >> } >> >> func main() { >> twoprint() >> } >> >> >> Cheers snmed >> >> >> Am Donnerstag, 2. November 2017 10:37:15 UTC+1 schrieb 28911...@gmail.com >> : >>> >>> Sorry,I try my best to open the website but it can't work.Can you write >>> it ??Thank you so much. >>> >>> 在 2017年10月30日星期一 UTC+8下午4:29:44,snmed写道: >>>> >>>> Hi >>>> >>>> There are several ways to solve it, here are two of them: >>>> >>>> https://play.golang.org/p/wJwkI7HQwv >>>> https://play.golang.org/p/nasUcgBeG4 >>>> >>>> I prefer the first one, because so I can decide if i want to wait for >>>> the end of twoprint or not. >>>> >>>> Cheers >>>> >>>> Am Montag, 30. Oktober 2017 06:43:45 UTC+1 schrieb 28911...@gmail.com: >>>>> >>>>> Yes, you're right.So how to solve it?? >>>>> >>>>> 在 2017年10月30日星期一 UTC+8下午12:37:49,Dave Cheney写道: >>>>>> >>>>>> Hello. I’m guessing that your tried calling twoprint(), but you’ve >>>>>> probably found that nothing is printed to the screen before your program >>>>>> exits. >>>>>> >>>>>> Is that correct? >>>>> >>>>> -- > 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.