projects
/
c11tester.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
11da849
)
linuxrwlocksyield: refactor
author
Brian Norris
<banorris@uci.edu>
Wed, 6 Mar 2013 07:05:25 +0000
(23:05 -0800)
committer
Brian Norris
<banorris@uci.edu>
Wed, 6 Mar 2013 07:05:25 +0000
(23:05 -0800)
test/linuxrwlocksyield.c
patch
|
blob
|
history
diff --git
a/test/linuxrwlocksyield.c
b/test/linuxrwlocksyield.c
index 9a676b0868a715b65c6828cf097ac6432f25f7c5..be3550e11e3c8f8740b4c1a47458180f57994a3a 100644
(file)
--- 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);
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();
thrd_yield();
- }
while (true);
+ }
priorvalue = atomic_fetch_sub_explicit(&rw->lock, 1, memory_order_acquire);
}
}
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);
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();
thrd_yield();
- }
while (true);
+ }
priorvalue = atomic_fetch_sub_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_acquire);
}
}
priorvalue = atomic_fetch_sub_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_acquire);
}
}