On Tue, Dec 3, 2019 at 6:54 PM Liam <networkimp...@gmail.com> wrote:
>
> Busy means would-block, yes.
>
> Burak thanks, but that doesn't work for read-lock.
You are right, I keep reading it as Lock instead of RLock.

Here's another attempt at solving it:

https://play.golang.org/p/az3hnyIwe47




>
> On Tuesday, December 3, 2019 at 5:39:48 PM UTC-8, Robert Engels wrote:
>>
>> It depends then, because technically the Go RW lock queues readers behind a 
>> waiting writer so “busy” is somewhat undefined. If “busy” means “would 
>> block” you can still do it - I’ll post the code tonight.
>>
>> > On Dec 3, 2019, at 6:49 PM, Robert Engels <ren...@ix.netcom.com> wrote:
>> >
>> > I would use an atomic and a lock instead of two locks.
>> >
>> >>> On Dec 3, 2019, at 6:35 PM, burak serdar <bse...@computer.org> wrote:
>> >>>
>> >>> On Tue, Dec 3, 2019 at 5:21 PM Liam Breck <networ...@gmail.com> wrote:
>> >>>
>> >>> I have a problem that is trivially solved via
>> >>>
>> >>> door sync.RWMutex
>> >>>
>> >>> func Reader() T {
>> >>>  if !door.TryRLock() { // missing in stdlib :-(
>> >>>     return busy
>> >>>  }
>> >>>  defer door.RUnlock()
>> >>>  ...
>> >>> }
>> >>>
>> >>> func Writer() {
>> >>>  door.Lock()
>> >>>  defer door.Unlock()
>> >>>  ...
>> >>> }
>> >>>
>> >>> How does one achieve this in Go?
>> >>
>> >> Two locks and a bool?
>> >>
>> >> var door=sync.Mutex{}
>> >> var x=sync.Mutex{}
>> >> var b bool
>> >>
>> >> func trylock() bool {
>> >> x.Lock()
>> >> if b {
>> >> x.Unlock()
>> >> return false
>> >> }
>> >> b=true
>> >> door.Lock()
>> >> x.Unlock()
>> >> return true
>> >> }
>> >>
>> >> unlock:
>> >>
>> >> x.Lock()
>> >> b=false
>> >> door.Unlock()
>> >> x.Unlock()
>> >>
>> >>
>> >>
>> >>
>> >>>
>> >>> --
>> >>> 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 golan...@googlegroups.com.
>> >>> To view this discussion on the web visit 
>> >>> https://groups.google.com/d/msgid/golang-nuts/CAKvHMgTO%3DxfFQ_u7aO9UE-1vHHEKmdhr47sro2mnp6DkEb6mPA%40mail.gmail.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 golan...@googlegroups.com.
>> >> To view this discussion on the web visit 
>> >> https://groups.google.com/d/msgid/golang-nuts/CAMV2RqrDeBNhkeswg%2BhdCf1kSzMEJduota%3D6UrNq4z2PQRtzEQ%40mail.gmail.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/022a5bb5-be27-4721-afe4-7e08f4531a3d%40googlegroups.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/CAMV2Rqpxig7j7Z7miYdbt2ukwqVAqghJZHh-eNG%3Dj8CaAb8r5A%40mail.gmail.com.

Reply via email to