From d117b02be8d53a5155eca8d38bc3b9348a7ada10 Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 15 May 2023 19:02:38 +0800 Subject: [PATCH] add --- sync/RWMutex.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sync/RWMutex.go b/sync/RWMutex.go index b3c17f1..c6f8812 100644 --- a/sync/RWMutex.go +++ b/sync/RWMutex.go @@ -89,12 +89,18 @@ func (m *RWMutex) Lock(to ...time.Duration) (lockf func() (unlockf func())) { } } c := time.Now() - for m.rlc.Load() > ulock || lockid-1 != m.oll.Load() { + for m.rlc.Load() > ulock { if time.Since(c) > to[0] { panic(fmt.Sprintf("timeout to wait rlock, rlc:%d", m.rlc.Load())) } runtime.Gosched() } + for lockid-1 != m.oll.Load() { + if time.Since(c) > to[0] { + panic(fmt.Sprintf("timeout to wait lock, rlc:%d", m.rlc.Load())) + } + runtime.Gosched() + } if !m.rlc.CompareAndSwap(ulock, lock) { panic(fmt.Sprintf("csa error, rlc:%d", m.rlc.Load())) } -- 2.39.2