mirror of git://git.musl-libc.org/musl
spin in sem_[timed]wait before performing futex wait
empirically, this increases the maximum rate of wait/post operations between two threads by 20-150 times on machines I tested, including x86 and arm. conceptually, it makes sense to do some spinning because semaphores are intended to be usable as a notification mechanism between threads, not just as locks, and low-latency notification is a valuable property to have.
This commit is contained in:
parent
8b3d7d0d35
commit
2ff714c613
|
@ -8,6 +8,11 @@ static void cleanup(void *p)
|
|||
|
||||
int sem_timedwait(sem_t *restrict sem, const struct timespec *restrict at)
|
||||
{
|
||||
if (!sem_trywait(sem)) return 0;
|
||||
|
||||
int spins = 100;
|
||||
while (spins-- && sem->__val[0] <= 0) a_spin();
|
||||
|
||||
while (sem_trywait(sem)) {
|
||||
int r;
|
||||
a_inc(sem->__val+1);
|
||||
|
|
Loading…
Reference in New Issue