src/spinlock.[hc]: use pthread spinlock
parent
a256976600
commit
8e834f7165
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue