Mercurial > hg > Members > masakoha > testcode
view parallel_processing/chapter3/ppb_cond_queue/ppb_queue.h @ 132:fb4c8adf3a80 pairPro
fix include '|' in regex
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 02 Dec 2015 23:30:48 +0900 |
parents | 508b47c8f4d8 |
children |
line wrap: on
line source
#ifdef _PPB_QUEUE_H #define _PPB_QUEUE_H #include <unistd.h> #include <pthread.h> #ifdef MAX_QUEUE_NUM #define MAX_QUEUE_NUM 10 #endif /* MAX_QUEUE_NUM */ /* typedef struct _queue { int values[MAX_QUEUE_NUM]; volatile int remain; int rp, wp; pthread_mutex_t mutex; pthread_cond_t not_full; pthread_cond_t not_empty; } queue_t; */ void enqueue(queue_t *q, int v) { pthread_mutex_lock(&q->mutex); while (q->remain == MAX_QUEUE_NUM) pthread_cond_wait(&q->not_full, &q->mutex); q->values[q->wp] = v; q->wp++; q->remain++; if (q->wp == MAX_QUEUE_NUM) q->wp = 0; pthread_cond_signal(&q->not_empty); pthread_mutex_unlock(&q->mutex); } void dequeue(queue_t *q, int v) { pthread_mutex_lock(&q->mutex); while (q->remain == 0) pthread_cond_wait(&q->not_empty, &q->mutex); v = q->values[q->rp]; q->rp++; q->remain--; if (q->rp == MAX_QUEUE_NUM) q->rp = 0; pthread_cond_signal(&q->not_full); pthread_mutex_unlock(&q->mutex); } #endif /* _PPB_QUEUE_H */