Преглед изворни кода

cheap special-case optimization for normal mutexes

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.
Rich Felker пре 14 година
родитељ
комит
124b4ebc8a
1 измењених фајлова са 4 додато и 0 уклоњено
  1. 4 0
      src/thread/pthread_mutex_lock.c

+ 4 - 0
src/thread/pthread_mutex_lock.c

@@ -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