go/src/sync
Wedson Almeida Filho 8e7072ca83 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>
2016-03-15 22:01:20 +00:00
..
atomic all: single space after period. 2016-03-02 00:13:47 +00:00
cond.go sync: new Cond implementation 2016-03-15 22:01:20 +00:00
cond_test.go sync: new Cond implementation 2016-03-15 22:01:20 +00:00
example_test.go
export_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
mutex.go all: single space after period. 2016-03-02 00:13:47 +00:00
mutex_test.go
once.go all: single space after period. 2016-03-02 00:13:47 +00:00
once_test.go
pool.go all: use cannot instead of can not 2016-02-21 15:35:50 +00:00
pool_test.go
runtime.go sync: new Cond implementation 2016-03-15 22:01:20 +00:00
runtime_sema_test.go
rwmutex.go all: single space after period. 2016-03-02 00:13:47 +00:00
rwmutex_test.go
waitgroup.go all: single space after period. 2016-03-02 00:13:47 +00:00
waitgroup_test.go sync: deflake TestWaitGroupMisuse3 2016-02-03 20:03:32 +00:00