]> Cypherpunks repositories - gostls13.git/commit
sync: yield to the waiter when unlocking a starving mutex
authorRhys Hiltner <rhys@justin.tv>
Fri, 8 Nov 2019 18:30:24 +0000 (10:30 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sat, 9 Nov 2019 19:31:32 +0000 (19:31 +0000)
commit7148478f1b433caa11c8827657ee1bc61f0b1c5d
treef5c52805a13b0ba7285133891b22d5424aa059cc
parent6e111956ab4849976f9dcf46ecac575fa8105268
sync: yield to the waiter when unlocking a starving mutex

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: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/export_test.go
src/runtime/proc.go
src/runtime/sema.go
src/runtime/sema_test.go [new file with mode: 0644]
src/sync/mutex.go