step_.fetch_add(1, std::memory_order_release);
return true;
} else {
- ExpBackoff backoff;
+// ExpBackoff backoff;
/* Run in circles and scream like a little girl. */
while (step_.load(std::memory_order_acquire) == step) {
- backoff();
+// backoff();
}
return false;
}
// now this is the spin -
// wait on predecessor setting my flag -
- ExpBackoff backoff;
+// ExpBackoff backoff;
while (me->gate.load(std::memory_order_acquire)) {
- backoff();
+// backoff();
}
}
}
}
// (*1) catch the race :
- ExpBackoff backoff;
+// ExpBackoff backoff;
for (;;) {
next = me->next.load(std::memory_order_acquire);
if (next != nullptr)
break;
- backoff();
+// backoff();
}
}
}
void read_lock() {
- ExpBackoff backoff;
+// ExpBackoff backoff;
int priorvalue = atomic_fetch_sub_explicit(&lock, 1, memory_order_acquire);
while (priorvalue <= 0) {
atomic_fetch_add_explicit(&lock, 1, memory_order_relaxed);
while (atomic_load_explicit(&lock, memory_order_relaxed) <= 0) {
- backoff();
+// backoff();
}
priorvalue = atomic_fetch_sub_explicit(&lock, 1, memory_order_acquire);
}
void write_lock() {
int priorvalue =
atomic_fetch_sub_explicit(&lock, RW_LOCK_BIAS, memory_order_acquire);
- ExpBackoff backoff;
+// ExpBackoff backoff;
while (priorvalue != RW_LOCK_BIAS) {
atomic_fetch_add_explicit(&lock, RW_LOCK_BIAS, memory_order_relaxed);
while (atomic_load_explicit(&lock, memory_order_relaxed) !=
RW_LOCK_BIAS) {
- backoff();
+// backoff();
}
priorvalue =
atomic_fetch_sub_explicit(&lock, RW_LOCK_BIAS, memory_order_acquire);
}
int read() {
- ExpBackoff backoff;
+// ExpBackoff backoff;
while (true) {
int old_seq = seq_.load(memory_order_acquire);
if (old_seq % 2 == 1) {
- backoff();
+// backoff();
continue;
}
}
void write(int new_data) {
- ExpBackoff backoff;
+// ExpBackoff backoff;
while (true) {
// This might be a relaxed too
int old_seq = seq_.load(memory_order_acquire);
if (old_seq % 2 == 1) {
- backoff();
+// backoff();
continue; // Retry
}
// First grab a ticket
unsigned my_ticket = ticket.fetch_add(1, std::memory_order_relaxed);
// Spinning for my turn
- ExpBackoff backoff;
+// ExpBackoff backoff;
while (true) {
unsigned my_turn = turn.load(std::memory_order_acquire);
if (my_turn == my_ticket) {
// Now it's my turn
return;
} else {
- backoff();
+// backoff();
}
}
}