]> Cypherpunks repositories - gostls13.git/commit
sync: new Cond implementation
authorWedson Almeida Filho <wedsonaf@google.com>
Sun, 24 Jan 2016 18:23:48 +0000 (19:23 +0100)
committerAustin Clements <austin@google.com>
Tue, 15 Mar 2016 22:01:20 +0000 (22:01 +0000)
commit8e7072ca83f06a0b4afeef6538a4696e1572c5d0
tree887c57e2bcd9c05bcda003d24e1b127816b90c70
parent87151c82b68023e4224b016a6a66ead2c4b8ece7
sync: new Cond implementation

Change Cond implementation to use a notification list such that waiters
can first register for a notification, release the lock, then actually
wait. Signalers never have to park anymore.

This is intended to address an issue in the previous implementation
where Broadcast could fail to signal all waiters.

Results of the existing benchmark are below.

                                          Original          New  Diff
BenchmarkCond1-48        2000000               745 ns/op    755 +1.3%
BenchmarkCond2-48        1000000              1545 ns/op   1532 -0.8%
BenchmarkCond4-48         300000              3833 ns/op   3896 +1.6%
BenchmarkCond8-48         200000             10049 ns/op  10257 +2.1%
BenchmarkCond16-48        100000             21123 ns/op  21236 +0.5%
BenchmarkCond32-48         30000             40393 ns/op  41097 +1.7%

Fixes #14064

Change-Id: I083466d61593a791a034df61f5305adfb8f1c7f9
Reviewed-on: https://go-review.googlesource.com/18892
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Caleb Spare <cespare@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/cmd/compile/internal/gc/select.go
src/runtime/runtime2.go
src/runtime/sema.go
src/sync/cond.go
src/sync/cond_test.go
src/sync/runtime.go