Mercurial > hg > Papers > 2017 > mitsuki-prosym
view Paper/src/sync_enqueue.c @ 8:a6372acc8f0e
fix
author | mir3636 |
---|---|
date | Fri, 22 Dec 2017 17:22:47 +0900 |
parents | dbbe5ef644fb |
children |
line wrap: on
line source
// Enqueue(normal) __code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) { struct Element* last = queue->last; if (__sync_bool_compare_and_swap(&queue->last, last, new_element)) { last->next = new_element; queue->count++; goto meta(context, context->next); } else { goto meta(context, PutQueue3); } } // Enqueue(nothing element) __code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) { if (__sync_bool_compare_and_swap(&queue->first, 0, new_element)) { queue->last = new_element; queue->count++; goto meta(context, context->next); } else { goto meta(context, PutQueue3); } }