I feel like the docs are pretty precise in what they say and why.

a blocked Lock call excludes new readers from acquiring the lock.


This means, the following could happen:
Goroutine 1 calls RLock, acquires a Read-Lock
Goroutine 2 calls Lock, blocking
Goroutine 1 calls RLock again, blocking (as no new read locks can be
acquired while GR 2 is blocked).
Thus, you get a deadlock.

It also has a conditional on the section

If a goroutine holds a RWMutex for reading and another goroutine might call
> Lock […]


So if you know that no other goroutine might call Lock concurrently, then
yes, you can call RLock twice. I can't really imagine a setting where you'd
need an RWMutex and have that assurance and need recursive read locks. But
there might be one.

On Mon, Sep 21, 2020 at 12:16 PM Henrik Johansson <dahankz...@gmail.com>
wrote:

>
> https://golang.org/pkg/sync/#RWMutex
>
> Holds that this prohibits recursive read locks but why would it?
> I understand that deadlocks can happen in case write locks are held in
> between the read locks
> but why can't a goroutine issue several RLock calls?
>
> It does actually work in the playground.
> https://play.golang.org/p/nOehJaeikxA
> Is this simply a recommendation or should the docs be updated to clarify
> what this means?
>
>
> --
> 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/CAKOF696YKSGn3j%2BcyX7o0ukA7wnD2Kq19_QGefUoeMELUZGOWA%40mail.gmail.com
> <https://groups.google.com/d/msgid/golang-nuts/CAKOF696YKSGn3j%2BcyX7o0ukA7wnD2Kq19_QGefUoeMELUZGOWA%40mail.gmail.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/CAEkBMfHGbQyvmcrxbGYLN6BZqAQN3K1i_HxtQTXmV22668WWQg%40mail.gmail.com.

Reply via email to