X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2Flinuxrwlocksyield.c;h=e3a4a60585efc1026dcbcec219a3514aeaad3ab8;hb=3a23b972c2e37dc69b8b2f1d7938f3c63b93f5cf;hp=9a676b0868a715b65c6828cf097ac6432f25f7c5;hpb=fa36db2da01d7da10e0cd375fda3c2db4ce3a05b;p=c11tester.git diff --git a/test/linuxrwlocksyield.c b/test/linuxrwlocksyield.c index 9a676b08..e3a4a605 100644 --- a/test/linuxrwlocksyield.c +++ b/test/linuxrwlocksyield.c @@ -29,12 +29,9 @@ static inline void read_lock(rwlock_t *rw) int priorvalue = atomic_fetch_sub_explicit(&rw->lock, 1, memory_order_acquire); while (priorvalue <= 0) { atomic_fetch_add_explicit(&rw->lock, 1, memory_order_relaxed); - do { - priorvalue = atomic_load_explicit(&rw->lock, memory_order_relaxed); - if (priorvalue > 0) - break; + while (atomic_load_explicit(&rw->lock, memory_order_relaxed) <= 0) { thrd_yield(); - } while (true); + } priorvalue = atomic_fetch_sub_explicit(&rw->lock, 1, memory_order_acquire); } } @@ -44,12 +41,9 @@ static inline void write_lock(rwlock_t *rw) int priorvalue = atomic_fetch_sub_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_acquire); while (priorvalue != RW_LOCK_BIAS) { atomic_fetch_add_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_relaxed); - do { - priorvalue = atomic_load_explicit(&rw->lock, memory_order_relaxed); - if (priorvalue == RW_LOCK_BIAS) - break; + while (atomic_load_explicit(&rw->lock, memory_order_relaxed) != RW_LOCK_BIAS) { thrd_yield(); - } while (true); + } priorvalue = atomic_fetch_sub_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_acquire); } } @@ -90,7 +84,7 @@ int shareddata; static void a(void *obj) { int i; - for(i = 0; i < 2; i++) { + for(i = 0;i < 2;i++) { if ((i % 2) == 0) { read_lock(&mylock); load_32(&shareddata);