Mercurial > hg > Papers > 2020 > soto-midterm
comparison src/putSynchronizedQueue.cbc @ 1:73127e0ab57c
(none)
author | soto@cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 08 Sep 2020 18:38:08 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:b919985837a3 | 1:73127e0ab57c |
---|---|
1 __code putSynchronizedQueue(struct SynchronizedQueue* queue, union Data* data, __code next(...)) { | |
2 Element* element = new Element(); | |
3 element->data = data; | |
4 element->next = NULL; | |
5 Element* last = queue->last; | |
6 Element* nextElement = last->next; | |
7 if (last != queue->last) { | |
8 goto putSynchronizedQueue(); | |
9 } | |
10 if (nextElement == NULL) { | |
11 struct Atomic* atomic = queue->atomic; | |
12 goto atomic->checkAndSet(&last->next, nextElement, element, next(...), putSynchronizedQueue); | |
13 } else { // wrong last element | |
14 struct Atomic* atomic = queue->atomic; | |
15 goto atomic->checkAndSet(&queue->last, last, nextElement, putSynchronizedQueue, putSynchronizedQueue); | |
16 } | |
17 } |