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
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 [email protected].
For more options, visit https://groups.google.com/d/optout.