Mercurial > hg > Papers > 2018 > ryokka-sigos
view Paper/src/sync_enqueue.c @ 12:e20725cd6d8a default tip
fix slides
author | ryokka |
---|---|
date | Mon, 21 May 2018 00:29:29 +0900 |
parents | a5facba1adbc |
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); } }