annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ryokka
parents:
diff changeset
1 // Enqueue(normal)
ryokka
parents:
diff changeset
2 __code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) {
ryokka
parents:
diff changeset
3 struct Element* last = queue->last;
ryokka
parents:
diff changeset
4
ryokka
parents:
diff changeset
5 if (__sync_bool_compare_and_swap(&queue->last, last, new_element)) {
ryokka
parents:
diff changeset
6 last->next = new_element;
ryokka
parents:
diff changeset
7 queue->count++;
ryokka
parents:
diff changeset
8
ryokka
parents:
diff changeset
9 goto meta(context, context->next);
ryokka
parents:
diff changeset
10 } else {
ryokka
parents:
diff changeset
11 goto meta(context, PutQueue3);
ryokka
parents:
diff changeset
12 }
ryokka
parents:
diff changeset
13 }
ryokka
parents:
diff changeset
14
ryokka
parents:
diff changeset
15 // Enqueue(nothing element)
ryokka
parents:
diff changeset
16 __code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) {
ryokka
parents:
diff changeset
17 if (__sync_bool_compare_and_swap(&queue->first, 0, new_element)) {
ryokka
parents:
diff changeset
18 queue->last = new_element;
ryokka
parents:
diff changeset
19 queue->count++;
ryokka
parents:
diff changeset
20
ryokka
parents:
diff changeset
21 goto meta(context, context->next);
ryokka
parents:
diff changeset
22 } else {
ryokka
parents:
diff changeset
23 goto meta(context, PutQueue3);
ryokka
parents:
diff changeset
24 }
ryokka
parents:
diff changeset
25 }