comparison paper/src/sync_enqueue.c @ 1:59cb9d3f9a55

add
author mir3636
date Fri, 14 Apr 2017 23:30:08 +0900
parents
children
comparison
equal deleted inserted replaced
0:581d76326ace 1:59cb9d3f9a55
1 // Enqueue(normal)
2 __code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) {
3 struct Element* last = queue->last;
4
5 if (__sync_bool_compare_and_swap(&queue->last, last, new_element)) {
6 last->next = new_element;
7 queue->count++;
8
9 goto meta(context, context->next);
10 } else {
11 goto meta(context, PutQueue3);
12 }
13 }
14
15 // Enqueue(nothing element)
16 __code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) {
17 if (__sync_bool_compare_and_swap(&queue->first, 0, new_element)) {
18 queue->last = new_element;
19 queue->count++;
20
21 goto meta(context, context->next);
22 } else {
23 goto meta(context, PutQueue3);
24 }
25 }