瀏覽代碼

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