You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					34 lines
				
				536 B
			
		
		
			
		
	
	
					34 lines
				
				536 B
			| 
								 
											6 years ago
										 
									 | 
							
								#ifndef COMMON_CQUEUE_H
							 | 
						||
| 
								 | 
							
								#define COMMON_CQUEUE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <sys/queue.h>
							 | 
						||
| 
								 | 
							
								#include <pthread.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// a blocking queue
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct QueueEntry {
							 | 
						||
| 
								 | 
							
								  TAILQ_ENTRY(QueueEntry) entries;
							 | 
						||
| 
								 | 
							
								  void *data;
							 | 
						||
| 
								 | 
							
								} QueueEntry;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct Queue {
							 | 
						||
| 
								 | 
							
								  TAILQ_HEAD(queue, QueueEntry) q;
							 | 
						||
| 
								 | 
							
								  pthread_mutex_t lock;
							 | 
						||
| 
								 | 
							
								  pthread_cond_t cv;
							 | 
						||
| 
								 | 
							
								} Queue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void queue_init(Queue *q);
							 | 
						||
| 
								 | 
							
								void* queue_pop(Queue *q);
							 | 
						||
| 
								 | 
							
								void* queue_try_pop(Queue *q);
							 | 
						||
| 
								 | 
							
								void queue_push(Queue *q, void *data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}  // extern "C"
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |