void init_queue(queue_t *q, int num_threads)
{
- /**
- @Begin
- @Entry_point
- @End
- */
-
int i, j;
/* Initialize each thread's free list with INITIAL_FREE pointers */
pointer value = MAKE_POINTER(node, get_count(next) + 1);
success = atomic_compare_exchange_strong_explicit(&q->nodes[get_ptr(tail)].next,
&next, value, release, release);
+ /**
+ @Begin
+ @Commit_point_define_check: success == true
+ @Label: Enqueue_Success_Point
+ @End
+ */
}
if (!success) {
unsigned int ptr = get_ptr(atomic_load_explicit(&q->nodes[get_ptr(tail)].next, acquire));
pointer value = MAKE_POINTER(ptr,
get_count(tail) + 1);
- int commit_success = 0;
- commit_success = atomic_compare_exchange_strong_explicit(&q->tail,
+ atomic_compare_exchange_strong_explicit(&q->tail,
&tail, value, release, release);
- /**
- @Begin
- @Commit_point_define_check: __ATOMIC_RET__ == true
- @Label: Enqueue_Success_Point
- @End
- */
thrd_yield();
}
}
release, release);
}
-
/**
@Begin
@Interface_define: Dequeue
MODEL_ASSERT(get_ptr(next) != POISON_IDX);
if (get_ptr(next) == 0) { // NULL
+ /**
+ @Begin
+ @Commit_point_define_check: true
+ @Label: Dequeue_Empty_Point
+ @End
+ */
return 0; // NULL
}
atomic_compare_exchange_strong_explicit(&q->tail,
release, release);
/**
@Begin
- @Commit_point_define_check: __ATOMIC_RET__ == true
+ @Commit_point_define_check: success == true
@Label: Dequeue_Success_Point
@End
*/