Btw, the removing of the GOMAXPROCS causes things to execute serially- which is 
fine according to the spec - but it does make demonstrating certain concurrency 
structs/problems pretty difficult. 

> On Sep 1, 2019, at 7:05 AM, robert engels <reng...@ix.netcom.com> wrote:
> 
> 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> 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
>>> 
>>> - 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> wrote:
>>>> The code at https://play.golang.org/p/9ZdPVvwyaYK
>>>> 
>>>> 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.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/golang-nuts/C7B46199-05EA-47C1-9594-200E2DD36F99%40ix.netcom.com.
>> 
>> 
>> -- 
>> 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/AC9DEEBD-37DF-49FA-8171-E45418584697%40ix.netcom.com.
> 
> -- 
> 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.

-- 
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/915EA1FF-2B66-4473-9082-6FCC1E399B2D%40ix.netcom.com.

Reply via email to