Mercurial > hg > Papers > 2016 > parusu-sigos
view paper/src/sync_enqueue.c @ 6:7355dbef5b75
Update
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 08 May 2016 02:41:43 +0900 |
parents | |
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); } }