]> git.lizzy.rs Git - dragonstd.git/blob - queue.h
cfa72b8d9f06e9bb8188abaa30e6e49aae26d995
[dragonstd.git] / queue.h
1 #ifndef _DRAGONSTD_QUEUE_H_
2 #define _DRAGONSTD_QUEUE_H_
3
4 #include <pthread.h>
5 #include <stdbool.h>
6 #include <stdatomic.h>
7 #include "list.h"
8
9 typedef struct
10 {
11         atomic_bool cancel;
12         bool finish;
13         List list;
14         pthread_cond_t cv;
15         pthread_mutex_t mtx;
16 } Queue;
17
18 Queue *queue_create();
19 void queue_delete(Queue *queue);
20 void queue_enqueue(Queue *queue, void *elem);
21 void *queue_dequeue(Queue *queue);
22 void *queue_dequeue_callback(Queue *queue, void (*callback)(void *elem));
23 void queue_cancel(Queue *queue); // disallow dequeing
24 void queue_finish(Queue *queue); // disallow enqueing, wait until consumption finished
25
26 #endif