go/src/sync
Rhys Hiltner 7148478f1b 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>
2019-11-09 19:31:32 +00:00
..
atomic sync/atomic: suppress checkptr errors for hammerStoreLoadPointer 2019-10-22 18:09:03 +00:00
cond.go
cond_test.go
example_pool_test.go
example_test.go
export_test.go sync: fix pool wrap-around test 2019-06-26 19:48:39 +00:00
map.go
map_bench_test.go
map_reference_test.go
map_test.go
mutex.go sync: yield to the waiter when unlocking a starving mutex 2019-11-09 19:31:32 +00:00
mutex_test.go
once.go sync: document implementation of Once.Do 2019-07-01 14:45:49 +00:00
once_test.go
pool.go sync: update comment 2019-04-19 16:15:36 +00:00
pool_test.go sync: only check for successful PopHeads in long mode 2019-06-26 19:48:42 +00:00
poolqueue.go sync: internal dynamically sized lock-free queue for sync.Pool 2019-04-05 18:49:04 +00:00
runtime.go sync: allow inlining the Mutex.Lock fast path 2019-03-09 05:08:04 +00:00
runtime_sema_test.go
rwmutex.go sync: allow inlining the RWMutex.RUnlock fast path 2019-03-09 16:34:17 +00:00
rwmutex_test.go
waitgroup.go
waitgroup_test.go