• R
    redo cond vars again, use sequence numbers · 729d6368
    Rich Felker 提交于
    testing revealed that the old implementation, while correct, was
    giving way too many spurious wakeups due to races changing the value
    of the condition futex. in a test program with 5 threads receiving
    broadcast signals, the number of returns from pthread_cond_wait was
    roughly 3 times what it should have been (2 spurious wakeups for every
    legitimate wakeup). moreover, the magnitude of this effect seems to
    grow with the number of threads.
    
    the old implementation may also have had some nasty race conditions
    with reuse of the cond var with a new mutex.
    
    the new implementation is based on incrementing a sequence number with
    each signal event. this sequence number has nothing to do with the
    number of threads intended to be woken; it's only used to provide a
    value for the futex wait to avoid deadlock. in theory there is a
    danger of race conditions due to the value wrapping around after 2^32
    signals. it would be nice to eliminate that, if there's a way.
    
    testing showed no spurious wakeups (though they are of course
    possible) with the new implementation, as well as slightly improved
    performance.
    729d6368
pthread_cond_timedwait.c 1.4 KB