瀏覽代碼

minor optimization to pthread_spin_trylock

use CAS instead of swap since it's lighter for most archs, and keep
EBUSY in the lock value so that the old value obtained by CAS can be
used directly as the return value for pthread_spin_trylock.
Rich Felker 10 年之前
父節點
當前提交
afbcac6826
共有 2 個文件被更改,包括 4 次插入2 次删除
  1. 2 1
      src/thread/pthread_spin_lock.c
  2. 2 1
      src/thread/pthread_spin_trylock.c

+ 2 - 1
src/thread/pthread_spin_lock.c

@@ -1,7 +1,8 @@
 #include "pthread_impl.h"
+#include <errno.h>
 
 int pthread_spin_lock(pthread_spinlock_t *s)
 {
-	while (*(volatile int *)s || a_cas(s, 0, 1)) a_spin();
+	while (*(volatile int *)s || a_cas(s, 0, EBUSY)) a_spin();
 	return 0;
 }

+ 2 - 1
src/thread/pthread_spin_trylock.c

@@ -1,6 +1,7 @@
 #include "pthread_impl.h"
+#include <errno.h>
 
 int pthread_spin_trylock(pthread_spinlock_t *s)
 {
-	return -a_swap(s, 1) & EBUSY;
+	return a_cas(s, 0, EBUSY);
 }