• Rhys Hiltner's avatar
    sync: yield to the waiter when unlocking a starving mutex · 7148478f
    Rhys Hiltner authored
    When we have already assigned the semaphore ticket to a specific
    waiter, we want to get the waiter running as fast as possible since
    no other G waiting on the semaphore can acquire it optimistically.
    
    The net effect is that, when a sync.Mutex is contended, the code in
    the critical section guarded by the Mutex gets a priority boost.
    
    Fixes #33747
    
    The original work was done in CL 200577 by Carlo Alberto Ferraris. The
    change was reverted in CL 205817 because it broke the linux-arm64-packet
    and solaris-amd64-oraclerel builders.
    
    Change-Id: I76d79b1d63fd206ed1c57fe6900cb7ae9e4d46cb
    Reviewed-on: https://go-review.googlesource.com/c/go/+/206180
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    7148478f
mutex.go 7.32 KB