#include "queue.h" int Initialize(locklessQueue * queue) { queue->Tail = (node*)malloc(sizeof(node)); if(queue->Tail == NULL) { fprintf(stderr, "Failed to allocate memory for initialization."); return 1; } queue->Tail->next = NULL; queue->Tail->count = 0; queue->Head = queue->Tail; return 0; } int dequeue(locklessQueue * queue, void** data) { node *tail, *head, *next; tail = NULL; head = NULL; next = NULL; while(1 == 1) { tail = queue->Tail; head = queue->Head; next = tail->next; if(tail == queue->Tail) { if(tail == head) { if(next == NULL) { return 1; //List empty } CAS(&queue->Head, head, next); } else//Most errors in this else { *data = next->data; if(CAS(&queue->Tail, tail, next)) { free(tail); tail = NULL; return 0; } } } } }