• Wedson Almeida Filho's avatar
    sync: new Cond implementation · 8e7072ca
    Wedson Almeida Filho authored
    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/18892Reviewed-by: 's avatarDmitry Vyukov <dvyukov@google.com>
    Reviewed-by: 's avatarAustin Clements <austin@google.com>
    Run-TryBot: Caleb Spare <cespare@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    8e7072ca
cond.go 2.28 KB