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.