--- glibc-2.23/nptl/pthread_mutex_lock.c.org 2016-03-03 22:33:24.230342596 -0500 +++ glibc-2.23/nptl/pthread_mutex_lock.c 2016-03-03 22:43:18.285915880 -0500 @@ -75,9 +75,22 @@ if (__glibc_likely (type == PTHREAD_MUTEX_TIMED_NP)) { FORCE_ELISION (mutex, goto elision); - simple: - /* Normal mutex. */ - LLL_MUTEX_LOCK (mutex); + if (LLL_MUTEX_TRYLOCK (mutex) != 0) + { + int cnt = 0; + do + { + if (cnt++ >= 256 || !__is_smp) + { + /* Normal mutex. */ +simple: + LLL_MUTEX_LOCK (mutex); + break; + } + atomic_spin_nop (); + } + while (LLL_MUTEX_TRYLOCK (mutex) != 0); + } assert (mutex->__data.__owner == 0); } #ifdef HAVE_ELISION