mcs-queue -> ms-queue
[model-checker-benchmarks.git] / ms-queue / my_queue.h
1 #include <stdatomic.h>
2
3 #define TRUE                            1
4 #define FALSE                           0
5
6 #define MAX_NODES                       0xff
7 #define MAX_SERIAL                      10000
8
9 #define MAKE_LONG(lo, hi)               ((hi)<<16)+(lo)
10
11 typedef union pointer {
12         struct {
13                 volatile unsigned short count;
14                 volatile unsigned short ptr;
15         } sep;
16         atomic_ulong con;
17 } pointer_t;
18
19 typedef struct node {
20         unsigned value;
21         pointer_t next;
22         unsigned foo[30];
23 } node_t;
24
25 typedef struct private {
26         unsigned node;
27         unsigned value;
28         unsigned serial[MAX_SERIAL];
29 } private_t;
30
31 typedef struct shared_mem {
32         pointer_t head;
33         unsigned foo1[31];
34         pointer_t tail;
35         unsigned foo2[31];
36         node_t nodes[MAX_NODES+1];
37         unsigned serial;
38 } shared_mem_t;
39
40 void init_private();
41 void init_memory();
42 void init_queue();
43 unsigned dequeue();