src/spinlock.[hc]: use pthread spinlock

use_iouring
YuQing 2025-07-18 11:04:53 +08:00
parent a256976600
commit 8e834f7165
2 changed files with 7 additions and 8 deletions

View File

@ -39,9 +39,8 @@ static inline int fc_futex(int *ptr, int op, int val)
int fc_spinlock_init(FCSpinlock *lock, int *cond) int fc_spinlock_init(FCSpinlock *lock, int *cond)
{ {
#ifdef OS_LINUX #ifdef OS_LINUX
lock->mutex = 0;
lock->cond = cond; lock->cond = cond;
return 0; return pthread_spin_init(&lock->mutex, 0);
#else #else
return init_pthread_lock_cond_pair(&lock->lcp); return init_pthread_lock_cond_pair(&lock->lcp);
#endif #endif
@ -58,7 +57,7 @@ void fc_spinlock_destroy(FCSpinlock *lock)
int fc_spinlock_lock(FCSpinlock *lock) int fc_spinlock_lock(FCSpinlock *lock)
{ {
#ifdef OS_LINUX #ifdef OS_LINUX
return fc_futex(&lock->mutex, FUTEX_LOCK_PI_PRIVATE, 0); return pthread_spin_lock(&lock->mutex);
#else #else
return pthread_mutex_lock(&lock->lcp.lock); return pthread_mutex_lock(&lock->lcp.lock);
#endif #endif
@ -67,7 +66,7 @@ int fc_spinlock_lock(FCSpinlock *lock)
int fc_spinlock_trylock(FCSpinlock *lock) int fc_spinlock_trylock(FCSpinlock *lock)
{ {
#ifdef OS_LINUX #ifdef OS_LINUX
return fc_futex(&lock->mutex, FUTEX_TRYLOCK_PI_PRIVATE, 0); return pthread_spin_trylock(&lock->mutex);
#else #else
return pthread_mutex_trylock(&lock->lcp.lock); return pthread_mutex_trylock(&lock->lcp.lock);
#endif #endif
@ -76,7 +75,7 @@ int fc_spinlock_trylock(FCSpinlock *lock)
int fc_spinlock_unlock(FCSpinlock *lock) int fc_spinlock_unlock(FCSpinlock *lock)
{ {
#ifdef OS_LINUX #ifdef OS_LINUX
return fc_futex(&lock->mutex, FUTEX_UNLOCK_PI_PRIVATE, 0); return pthread_spin_unlock(&lock->mutex);
#else #else
return pthread_mutex_unlock(&lock->lcp.lock); return pthread_mutex_unlock(&lock->lcp.lock);
#endif #endif
@ -88,11 +87,11 @@ int fc_spinlock_wait(FCSpinlock *lock, const int expected)
int result; int result;
int lock_ret; int lock_ret;
if ((result=fc_futex(&lock->mutex, FUTEX_UNLOCK_PI_PRIVATE, 0)) != 0) { if ((result=pthread_spin_unlock(&lock->mutex)) != 0) {
return result; return result;
} }
result = fc_futex(lock->cond, FUTEX_WAIT_PRIVATE, expected); result = fc_futex(lock->cond, FUTEX_WAIT_PRIVATE, expected);
lock_ret = fc_futex(&lock->mutex, FUTEX_LOCK_PI_PRIVATE, 0); lock_ret = pthread_spin_lock(&lock->mutex);
return result == 0 ? lock_ret : result; return result == 0 ? lock_ret : result;
#else #else
return pthread_cond_wait(&lock->lcp.cond, &lock->lcp.lock); return pthread_cond_wait(&lock->lcp.cond, &lock->lcp.lock);

View File

@ -21,7 +21,7 @@
typedef struct fc_spinlock_t { typedef struct fc_spinlock_t {
#ifdef OS_LINUX #ifdef OS_LINUX
int mutex; pthread_spinlock_t mutex;
int *cond; int *cond;
#else #else
pthread_lock_cond_pair_t lcp; pthread_lock_cond_pair_t lcp;