-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathqueuetype.c
42 lines (39 loc) · 973 Bytes
/
queuetype.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "queuetype.h"
void initQueue(QueueType *q,int size) {
q->base =(void **) malloc(sizeof(void *) * size);
if(q->base == NULL){
printf("Queue Malloc error!");
}
q->front = q->rear = -1;
q->length = 0;
q->size = size;
pthread_mutex_init(&(q->mutex),NULL);
}
void enter(QueueType *q, void *x) {
pthread_mutex_lock(&(q->mutex));
if(q->front == -1 && ((q->rear + 1)==q->size)){
printf("Queue is full!\n");
}else if(((q->rear + 1) % q->size) == q->front) {
printf("Queue is full!\n");
}else{
q->rear = (q->rear + 1) % (q->size);
q->base[q->rear] = x;
}
q->length++;
pthread_mutex_unlock(&(q->mutex));
fflush(stdout);
}
void *dequeue(QueueType *q) {
pthread_mutex_lock(&(q->mutex));
void *tmp = NULL;
if(q->front == q->rear) {
printf("Queue is empty\n");
}else{
tmp = q->base[ (q->front + 1) %(q->size) ];
q->front = (q->front + 1) % (q->size);
q->length--;
}
fflush(stdout);
pthread_mutex_unlock(&(q->mutex));
return tmp;
}