Browse Source

Add the ability to downgrade a write variant of the cglocks.

nfactor-troky
Con Kolivas 11 years ago
parent
commit
9552f54f43
  1. 21
      miner.h

21
miner.h

@ -754,17 +754,28 @@ static inline void rw_unlock(pthread_rwlock_t *lock) @@ -754,17 +754,28 @@ static inline void rw_unlock(pthread_rwlock_t *lock)
{
if (unlikely(pthread_rwlock_unlock(lock)))
quit(1, "WTF RWLOCK ERROR ON UNLOCK!");
sched_yield();
}
static inline void rd_unlock_noyield(pthread_rwlock_t *lock)
{
rw_unlock(lock);
}
static inline void wr_unlock_noyield(pthread_rwlock_t *lock)
{
rw_unlock(lock);
}
static inline void rd_unlock(pthread_rwlock_t *lock)
{
rw_unlock(lock);
sched_yield();
}
static inline void wr_unlock(pthread_rwlock_t *lock)
{
rw_unlock(lock);
sched_yield();
}
static inline void mutex_init(pthread_mutex_t *lock)
@ -820,6 +831,14 @@ static inline void cg_wlock(cglock_t *lock) @@ -820,6 +831,14 @@ static inline void cg_wlock(cglock_t *lock)
wr_lock(&lock->rwlock);
}
/* Downgrade write variant to a read lock */
static inline void cg_dwlock(cglock_t *lock)
{
wr_unlock_noyield(&lock->rwlock);
rd_lock(&lock->rwlock);
mutex_unlock_noyield(&lock->mutex);
}
/* Downgrade intermediate variant to a read lock */
static inline void cg_dlock(cglock_t *lock)
{

Loading…
Cancel
Save