summaryrefslogtreecommitdiffstats
path: root/lock_free_queue.h
blob: 14a2cae76729d3bd84152d9903959216986e8887 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
 * File     : lock_free_queue.h
 * Author   : Jérémy Zurcher  <jeremy@asynk.ch>
 * Date     : 01/11/09 
 * License  : stolen from http://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf
 */

struct node;

typedef union pointer {
    struct {
        volatile struct node *ptr;
        volatile unsigned int count;
    } split;
    volatile unsigned long long concat;
} pointer_t;

typedef struct node {
    void *data;
    pointer_t next;
} node_t;

typedef struct queue {
    pointer_t head;
    pointer_t tail;
} lfq_t;

void init( lfq_t *q );
void enqueue( lfq_t *q, void *data );
void* dequeue( lfq_t *q );