The point about ‘mu’ is valid. Rather than ‘closed’, it should really be an 
‘error’ given the situation - as it is more applicable to the operation 
failures (as a black box IO component).


> On Sep 1, 2019, at 6:46 AM, Robert Engels <reng...@ix.netcom.com> wrote:
> 
> As I pointed out in another reply, I am fairly certain the atomic operations 
> must be valid in these cases due to the happens before relationship of them 
> and mutexes. 
> 
> I don’t agree that returning the channel is a proper design, it breaks the 
> encapsulation. Technically mine could use multiple channels behind the scenes 
> - yours cannot. 
> 
> On Sep 1, 2019, at 3:06 AM, roger peppe <rogpe...@gmail.com 
> <mailto:rogpe...@gmail.com>> wrote:
> 
>> The problem seems to be that you're using runtime.GOMAXPROCS. The fact that 
>> using GOMAXPROCS causes a deadlock is probably a bug, but it's an easy one 
>> to work around - just don't call it :)
>> 
>> FWIW here's a version of your code that I'd consider a little more idiomatic.
>> 
>> https://play.golang.org/p/ufLXXX1zbrn <https://play.golang.org/p/ufLXXX1zbrn>
>> 
>> - it reports true when an operation succeeds rather than when it fails 
>> (think reading from a channel or from a map).
>> - it removes the unnecessary (and probably wrong) atomic load
>> - it allows direct access to the channel for reading (and select etc) - no 
>> need to hide it behind the Read method.
>> - mutex fields are very often named "mu"
>> 
>>   cheers,
>>     rog.
>> 
>> On Sat, 31 Aug 2019 at 23:13, robert engels <reng...@ix.netcom.com 
>> <mailto:reng...@ix.netcom.com>> wrote:
>> The code at https://play.golang.org/p/9ZdPVvwyaYK 
>> <https://play.golang.org/p/JRSEPU3Uf17>
>> 
>> should not deadlock. But it reports:
>> 
>> fatal error: all goroutines are asleep - deadlock!
>> 
>> But if you look at the stack traces, you see multiple routines (sampled) 
>> like:
>> 
>> goroutine 1 [sleep]:
>> runtime.goparkunlock(...)
>>      /usr/local/go/src/runtime/proc.go:307
>> time.Sleep(0x3e8, 0x0)
>>      /usr/local/go/src/runtime/time.go:105 +0x1c0
>> main.main()
>>      /tmp/sandbox327672725/prog.go:81 +0x140
>> 
>> goroutine 5 [sleep]:
>> runtime.goparkunlock(...)
>>      /usr/local/go/src/runtime/proc.go:307
>> time.Sleep(0x1, 0x0)
>>      /usr/local/go/src/runtime/time.go:105 +0x1c0
>> main.producer(0x430150, 0x40a0e0)
>>      /tmp/sandbox327672725/prog.go:49 +0x60
>> created by main.main
>>      /tmp/sandbox327672725/prog.go:73 +0xe0
>> 
>> These routines are asleep, not blocked. They will awake from sleep 
>> (eventually) - so there cannot be a deadlock.
>> 
>> I am assuming this is a limitation of the Go playground back-end, but I 
>> can’t see it documented anywhere? Also, I’m not sure why this limitation 
>> would exist, since if all the routines are asleep or blocked, it is 
>> consuming no resources.
>> 
>> Ideas?
>> 
>> -- 
>> 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 
>> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/C7B46199-05EA-47C1-9594-200E2DD36F99%40ix.netcom.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/C7B46199-05EA-47C1-9594-200E2DD36F99%40ix.netcom.com?utm_medium=email&utm_source=footer>.
> 
> 
> -- 
> 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 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/AC9DEEBD-37DF-49FA-8171-E45418584697%40ix.netcom.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/AC9DEEBD-37DF-49FA-8171-E45418584697%40ix.netcom.com?utm_medium=email&utm_source=footer>.

-- 
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/C248F20A-88EC-4C36-9931-C9F35585206A%40ix.netcom.com.

Reply via email to