cheap special-case optimization for normal mutexes
authorRich Felker <dalias@aerifal.cx>
Wed, 30 Mar 2011 12:58:25 +0000 (08:58 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 30 Mar 2011 12:58:25 +0000 (08:58 -0400)
cycle-level benchmark on atom cpu showed typical pthread_mutex_lock
call dropping from ~120 cycles to ~90 cycles with this change. benefit
may vary with compiler options and version, but this optimization is
very cheap to make and should always help some.

src/thread/pthread_mutex_lock.c

index 477b3d808175164ed1c1c2b3460b7673d19dce71..87b19752ee0e4d2845a9e430ae2b60447c4533a4 100644 (file)
@@ -3,6 +3,10 @@
 int pthread_mutex_lock(pthread_mutex_t *m)
 {
        int r;
+
+       if (m->_m_type == PTHREAD_MUTEX_NORMAL && !a_swap(&m->_m_lock, 1))
+               return 0;
+
        while ((r=pthread_mutex_trylock(m)) == EBUSY) {
                if (!(r=m->_m_lock) || (r&0x40000000)) continue;
                if ((m->_m_type&3) == PTHREAD_MUTEX_ERRORCHECK