基于链表及环形队列的生产者与消费者简单实现
1.基于链表的生产者与消费者模拟实现
使用条件变量与互斥锁完成,可保证线程的互斥与同步,条件变量是衡量某种临界资源是否满足生产者生产或消费者消费的条件状况,而互斥锁是保证线程的安全性,条件变量与互斥锁必须搭配使用,而在某些情况下,互斥锁的使用可不与条件变量搭配;
分析生产者与消费者模型,可用“321原则”来描述:
‘3’指三种关系:生产者与消费者间关系(互斥与同步关系)、生产者与生产者间关系(互斥关系)、消费者与消费者间关系(互斥关系);
‘2’指两个角色:生产者(在临界区内放数据)、消费者(从临界区中拿数据);
‘1’指一个交易场所;
代码实现:(#include <pthread.h>)
(1)首先创建链表(链表基本操作)
(2)基于链表的生产者与消费者模型
(3)代码测试:
2.基于环形队列的生产者与消费者模拟实现
分析:使用数组模拟的环形队列和多元信号量同时完成,需为生产者和消费者各设置一个信号量semPro/semCos;
(1)代码实现:(#include <pthread.h> #include <semaphore.h>)
(2)代码测试:
在生产者与消费者模型中,需牢记“321原则”;