aboutsummaryrefslogtreecommitdiff
path: root/src/sync
diff options
context:
space:
mode:
authorRhys Hiltner <rhys@justin.tv>2019-11-08 10:30:24 -0800
committerBrad Fitzpatrick <bradfitz@golang.org>2019-11-09 19:31:32 +0000
commit7148478f1b433caa11c8827657ee1bc61f0b1c5d (patch)
treef5c52805a13b0ba7285133891b22d5424aa059cc /src/sync
parent6e111956ab4849976f9dcf46ecac575fa8105268 (diff)
downloadgo-7148478f1b433caa11c8827657ee1bc61f0b1c5d.tar.gz
go-7148478f1b433caa11c8827657ee1bc61f0b1c5d.zip
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>
Diffstat (limited to 'src/sync')
-rw-r--r--src/sync/mutex.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/sync/mutex.go b/src/sync/mutex.go
index 11ad20c975..3028552f74 100644
--- a/src/sync/mutex.go
+++ b/src/sync/mutex.go
@@ -216,7 +216,8 @@ func (m *Mutex) unlockSlow(new int32) {
old = m.state
}
} else {
- // Starving mode: handoff mutex ownership to the next waiter.
+ // Starving mode: handoff mutex ownership to the next waiter, and yield
+ // our time slice so that the next waiter can start to run immediately.
// Note: mutexLocked is not set, the waiter will set it after wakeup.
// But mutex is still considered locked if mutexStarving is set,
// so new coming goroutines won't acquire it.