Got it, thx~

在 2018年2月7日星期三 UTC+8下午11:25:24,matthe...@gmail.com写道:
>
> The select already received in that case and is waiting to send, but the 
> select has to be re-entered for the next receive to happen.
>
> Matt
>
> On Wednesday, February 7, 2018 at 9:22:31 AM UTC-6, Damon Zhao wrote:
>>
>> I know wrap with a goroutine can fix it. I just wonder why must use an 
>> extra goroutine?
>>
>> 在 2018年2月7日星期三 UTC+8下午11:00:25,matthe...@gmail.com写道:
>>>
>>> Desynchronizing "case idle <- <-source:" fixes it:
>>>
>>> case v := <-source:
>>>     go func () { idle <- v }()
>>>
>>> I added a counter to break after a number of loops since it goes 
>>> infinitely: https://play.golang.org/p/aZbmTKvpxcD
>>>
>>> Matt
>>>
>>> On Wednesday, February 7, 2018 at 8:38:41 AM UTC-6, Damon Zhao wrote:
>>>>
>>>> Please answer these questions before submitting your issue. Thanks!
>>>> What version of Go are you using (go version)?
>>>>
>>>> go version go1.9.3 darwin/amd64
>>>> Does this issue reproduce with the latest release?
>>>>
>>>> yes
>>>> What operating system and processor architecture are you using (go env
>>>> )?
>>>> GOARCH="amd64"
>>>> GOBIN=""
>>>> GOEXE=""
>>>> GOHOSTARCH="amd64"
>>>> GOHOSTOS="darwin"
>>>> GOOS="darwin"
>>>> GOPATH="/Users/ariesdevil/Dropbox/workspace/go_workspace"
>>>> GORACE=""
>>>> GOROOT="/usr/local/Cellar/go/1.9.3/libexec"
>>>> GOTOOLDIR="/usr/local/Cellar/go/1.9.3/libexec/pkg/tool/darwin_amd64"
>>>> GCCGO="gccgo"
>>>> CC="clang"
>>>> GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics 
>>>> -Qunused-arguments -fmessage-length=0 
>>>> -fdebug-prefix-map=/var/folders/h2/xl15t9g94tgfwclshzl086bh0000gp/T/go-build125147941=/tmp/go-build
>>>>  
>>>> -gno-record-gcc-switches -fno-common"
>>>> CXX="clang++"
>>>> CGO_ENABLED="1"
>>>> CGO_CFLAGS="-g -O2"
>>>> CGO_CPPFLAGS=""
>>>> CGO_CXXFLAGS="-g -O2"
>>>> CGO_FFLAGS="-g -O2"
>>>> CGO_LDFLAGS="-g -O2"
>>>> PKG_CONFIG="pkg-config"
>>>>
>>>> What did you do?
>>>>
>>>> code1: play.golang.org/p/8rcO11QS8un (@ianlancetaylor answerd at 
>>>> https://github.com/golang/go/issues/23728#issuecomment-363771924)
>>>>
>>>>
>>>> code2: https://play.golang.org/p/fJXhK8w22uu
>>>>
>>>> Above code2 sometimes run perfect and sometimes deadlock on my machine.
>>>>
>>>>
>>>> <https://lh3.googleusercontent.com/-j-2Sg_4wENk/WnsPXZktt7I/AAAAAAAAb9M/vI8Ci9g8k9gZ_83XWS6qgR2bxjuHN8w1ACLcBGAs/s1600/%25E5%25B1%258F%25E5%25B9%2595%25E5%25BF%25AB%25E7%2585%25A7%2B2018-02-07%2B22.10.22.png>
>>>>
>>>>
>>>>
>>>> But if I put it in a goroutine, the result is confused:
>>>>
>>>>
>>>> https://play.golang.org/p/oUmMr8TM2sz  success
>>>>
>>>> https://play.golang.org/p/54eLI7x5FwD failed
>>>>
>>>>
>>>> notice line 25 when I use
>>>>
>>>> ```
>>>>
>>>> case worker := <-source:
>>>>
>>>>         idle <- worker
>>>>
>>>> ```
>>>>
>>>> instead of:
>>>>
>>>> ```
>>>>
>>>> case idle <- <-source:
>>>>
>>>> ```
>>>>
>>>> it works.
>>>> What did you expect to see?
>>>>
>>>> I think it should not deadlock.
>>>> What did you see instead?
>>>> deadlock sometimes.
>>>>
>>>>
>>>>

-- 
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