blob: ac8a859217df0e8c45d879f5eac1eb6ec5046867 (
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.c
* 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 );
|