代码
封装信号量

基于信号量的环形队列
大纲

构造

enqueue
1.预定资源
2.找位置生产
3.释放资源

pop
消费者也类似

cpp
int num = 0;
pthread_mutex_t mutex;
int GetNumber()
{
pthread_mutex_lock(&mutex);
num++;
pthread_mutex_unlock(&mutex);
return num;
}
void *consumerRoutine(void *args)
{
RingQueue<int> *rq = static_cast<RingQueue<int> *>(args);
int number = GetNumber();
while (1)
{
int data;
rq->Pop(&data);
cout << "con--" << number << " ";
cout << "我是消费者,消费了--" << data << endl;
}
}
void *productorRoutine(void *args)
{
RingQueue<int> *rq = static_cast<RingQueue<int> *>(args);
int data = 5;
int number = GetNumber();
while (1)
{
sleep(1);
rq->Enqueue(data);
cout << "pro--" << number << " ";
cout << "我是生产者,生产了--" << data++ << endl;
}
}
int main()
{
RingQueue<int> *rq = new RingQueue<int>();
pthread_t c, p;
pthread_create(&c, nullptr, consumerRoutine, rq);
pthread_create(&p, nullptr, productorRoutine, rq);
pthread_join(c, nullptr);
pthread_join(p, nullptr);
return 0;
}

单生产单消费