项目中需要一个链表,线程A进行入队操作(生产者),线程B进行查询、出队操作(消费者),同时希望线程B在队列为空时阻塞,降低cpu负载,因此考虑用pthread_cond_wait进行实现:
主要实现功能:
1)出队和入队的加锁
2)当有元素入队时唤醒线程B
3)队列为空时线程B进入休眠
头文件:
#ifndef Queue_H
#define Queue_H
#include <stdlib.h>
#include <pthread.h>
typedef char* Frame;
typedef struct node * PNode;
typedef struct node
{
Frame frame;
PNode next;
}Node;
typedef struct
{
PNode front;
PNode rear;
int size;
pthread_mutex_t q_lock;
pthread_cond_t cond;
}Queue;
/*构造一个空队列*/
Queue *InitQueue();
/*销毁一个队列*/
void DestroyQueue(Queue *pqueue);
/*清空一个队列*/
void ClearQueue(Queue *pqueue);
/*判断队列是否为空*/
int IsEmpty(Queue *pqueue);
/*返回队列大小*/
int GetSize(Queue *pqueue);
/*返回队头元素*/
PNode GetFront(Queue *pqueue, Frame *frame);
/*返回队尾元素*/
PNode GetRear(Queue *pqueue, Frame *frame);
/*将新元素入队*/
PNode EnQ