On Saturday, March 24, 2018 at 11:49:11 AM UTC-4, Jake Montgomery wrote: > > There may not be any guarantee that the channel will always be full, but > in practice your code always produces 100 results for me. Both in the > playground <https://play.golang.org/p/zLozqzTtASh>, and on my machine > (go version go1.10 windows/amd64). With or without the Sleep commented out. > Am I missing something? > > - Jake >
It depends on the architecture, on my 64-bit OSes, it always print one line. > > On Saturday, March 24, 2018 at 6:41:19 AM UTC-4, T L wrote: >> >> In the following example, there are 99 goroutines queuing and blocking on >> sending a value to c. >> When the only buffered value is received, it looks there is a time >> interval until the buffer is filled. >> Shouldn't it be that the receive from the only buffer and fill next >> queuing value to the only buffer in one atomic operation? >> >> >> package main >> >> import "time" >> >> func main() { >> c := make(chan int, 1) >> for i := 0; i < 100; i++ { >> go func() { >> c <- 1 >> }() >> } >> >> time.Sleep(time.Second) >> >> n := 0 >> for len(c) == cap(c) { >> <-c >> println(n, len(c)) // here, len(c) is always 0 >> n++ >> // time.Sleep(time.Second/1000) // if this line is not commented >> off, there will be 100 lines output. >> } >> } >> > -- 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.