X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=treiber-stack%2Fstack_wildcard.c;h=d7c11ac4be5a0456c074486877c698ea2e4e9ce2;hb=f59f59385d850ff79016d33891fc09522ff509f3;hp=9fc501d0beeabc9a8f20626ace79b7a83e287490;hpb=f6c52abed3f6cc928e88c59f220a8b0f0d51c9fe;p=model-checker-benchmarks.git diff --git a/treiber-stack/stack_wildcard.c b/treiber-stack/stack_wildcard.c index 9fc501d..d7c11ac 100644 --- a/treiber-stack/stack_wildcard.c +++ b/treiber-stack/stack_wildcard.c @@ -4,6 +4,7 @@ #include "model-assert.h" #include "stack.h" +#include "wildcard.h" #define MAX_FREELIST 4 /* Each thread can own up to MAX_FREELIST free nodes */ #define INITIAL_FREE 2 /* Each thread starts with INITIAL_FREE free nodes */ @@ -82,14 +83,14 @@ void push(stack_t *s, unsigned int val) { bool success; while (true) { // acquire - oldTop = atomic_load_explicit(&s->top, acquire); + oldTop = atomic_load_explicit(&s->top, wildcard(1)); newTop = MAKE_POINTER(nodeIdx, get_count(oldTop) + 1); // relaxed - atomic_store_explicit(&node->next, oldTop, relaxed); + atomic_store_explicit(&node->next, oldTop, wildcard(2)); // release & relaxed success = atomic_compare_exchange_strong_explicit(&s->top, &oldTop, - newTop, release, relaxed); + newTop, wildcard(3), wildcard(4)); if (success) break; } @@ -103,16 +104,16 @@ unsigned int pop(stack_t *s) int val; while (true) { // acquire - oldTop = atomic_load_explicit(&s->top, acquire); + oldTop = atomic_load_explicit(&s->top, wildcard(5)); if (get_ptr(oldTop) == 0) return 0; node = &s->nodes[get_ptr(oldTop)]; // relaxed - next = atomic_load_explicit(&node->next, relaxed); + next = atomic_load_explicit(&node->next, wildcard(6)); newTop = MAKE_POINTER(get_ptr(next), get_count(oldTop) + 1); // release & relaxed success = atomic_compare_exchange_strong_explicit(&s->top, &oldTop, - newTop, release, relaxed); + newTop, wildcard(7), wildcard(8)); if (success) break; }