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.

Reply via email to