X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=ms-queue%2Fmy_queue.h;h=edaf3ddd1a7f4d925908e67e3a9c2f807e39c39a;hb=f19c4f0d0d8c054fdea82137c57dc0dca3059704;hp=4ce05b49af99184007088b45ef697601ce11c9b2;hpb=bead5206c1935e3b499300c7e8b5b41a259a04c6;p=model-checker-benchmarks.git diff --git a/ms-queue/my_queue.h b/ms-queue/my_queue.h index 4ce05b4..edaf3dd 100644 --- a/ms-queue/my_queue.h +++ b/ms-queue/my_queue.h @@ -11,25 +11,21 @@ typedef atomic_ullong pointer_t; static inline void set_count(pointer *p, unsigned int val) { *p = (*p & ~COUNT_MASK) | ((pointer)val << 32); } static inline void set_ptr(pointer *p, unsigned int val) { *p = (*p & ~PTR_MASK) | val; } -static inline unsigned int get_count(pointer p) { return p & PTR_MASK; } -static inline unsigned int get_ptr(pointer p) { return (p & COUNT_MASK) >> 32; } +static inline unsigned int get_count(pointer p) { return (p & COUNT_MASK) >> 32; } +static inline unsigned int get_ptr(pointer p) { return p & PTR_MASK; } typedef struct node { unsigned int value; pointer_t next; } node_t; -typedef struct private { - unsigned int node; -} private_t; - -typedef struct shared_mem { +typedef struct { pointer_t head; pointer_t tail; node_t nodes[MAX_NODES + 1]; } queue_t; -void init_private(int pid); -void init_queue(queue_t *q); +void init_queue(queue_t *q, int num_threads); void enqueue(queue_t *q, unsigned int val); -unsigned int dequeue(queue_t *q); +bool dequeue(queue_t *q, unsigned int *retVal); +int get_thread_num();