Thanks much for reply @lan
On Monday, November 23, 2020 at 11:55:46 PM UTC+8 Ian Lance Taylor wrote:

> On Mon, Nov 23, 2020 at 6:05 AM 叶志辉 <yezhihui...@gmail.com> wrote:
> >
> > A little confused by the test case of `singleflight` of 
> `internal/singleflight`.
> >
> > Which is the codes singleflight.
> >
> > 1. wg1
> >
> > Purpose for wg1 is as commented as:
> >
> > // At least one goroutine is in fn now and all of them have at
> > // least reached the line before the Do.
> >
> > Confused about `At least one goroutine is in fn `,what test situation 
> for this?
> > I mean, for example, if 'no one goroutine is in fn', would be any 
> problem?
>
> The point of the test is to make sure that the singleflight code only
> makes a single concurrent call to the function. Writing to c will
> cause fn to return. There should only be one goroutine in fn at a
> time. Waiting until at least one goroutine is in fn before writing to
> c maximizes the possibility of detecting a bug that causes fn to be
> called more than once simultaneously.
>
>
> > 2. the channel `c`
> >
> > Each `fn` just read from `c`, and write value back, as codes:
> >
> > v := <-c
> > c <- v // pump; make available for any future calls
> >
> > Don't really get the purpose.
>
> We are testing that fn is only called once concurrently. There can be
> multiple calls to fn. Writing a value to the channel after reading
> one is an easy way to make sure that the next call to fn will succeed.
>
>
> > 3. got value
> > The expect value of got is: 0<got<N.
> >
> > Why not 0<got<=N, I mean there is case got==N?
>
> got == n means that every all to g.Do called fn. While that is
> technically possible, it is quite unlikely, because the use of wg1
> means that all n goroutines will be at least very close to calling
> g.Do before fn ever returns. So got == n suggests that fn was called
> concurrently by multiple goroutines, which would be a bug.
>
> Ian
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/4fc93094-c43c-4e56-8bb6-1091a404dd7bn%40googlegroups.com.

Reply via email to