5 typedef struct Queue Queue;
8 typedef struct QueueNode QueueNode;
22 void initQueue(Queue* queue)
24 QueueNode* fake = malloc(sizeof(QueueNode));
32 void enqueue(Queue* queue, void* item)
35 QueueNode* node = malloc(sizeof(QueueNode));
40 while(!__sync_bool_compare_and_swap(&(queue->tail->next), NULL, node));
42 // Reuse the node variable to update the tail
43 while((node = queue->tail)->next != NULL)
45 __sync_bool_compare_and_swap(&(queue->tail), node, node->next);
49 void* dequeue(Queue* queue, void* defaultResult)
51 if(queue->head == queue->tail) return defaultResult;
53 assert(queue->head->next != NULL);
55 QueueNode* previous = queue->head;
56 queue->head = previous->next;
58 return queue->head->item;
61 void freeQueue(Queue* queue)
63 QueueNode* node = queue->head;
68 QueueNode* temp = node;