1、 操作系统课程设计报告 生产者与消费者算法的实现生产者与消费者算法的实现 课程名称:计算机操作系统课程设计 小组成员: 班 级: 时 间: 操作系统课程设计 生产者与消费者实现 i 目录目录 1 课设简介: . 1 1.1 课程设计题目 1 1.2 课程设计小组成员 . 1 1.3 小组成员任务分配情况及每人所占工作比例 . 1 2 生产者和消费者原理分析 1 3 生产者与消费者功能描述: 1 4 数据结构分析 . 2 5 生产者与消费者实现代码 2 6 心得体会. 7 参考文献: 7 相关工具: 8 致谢: . 8 操作系统课程设计 生产者与消费者算法实现 1 1 课设简介课设简介: 1.1
2、 课程设计题目课程设计题目 生产者与消费者算法的实现 1.2 课程设计小组成员课程设计小组成员 张洋、巢蕾、段敏 1.3 小组成员任务分配情况及每人所占工作比例小组成员任务分配情况及每人所占工作比例 张 洋 负责:负责:分析设计消费一个产品方法和主方法并且画出流程图,后期组织组内成 员成果汇总进行本组总体报告撰写。 巢 蕾 负责:负责:分析设计生产者的行为方法和消费者的行为方法,并且画出流程图 段 敏 负责:负责:分析设计生产产品的方法和把新生产的产品放入缓冲区,并且画出流程 图。 2 生产者和消费者生产者和消费者原理分析原理分析 在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后
3、将物品放置在一个 空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线 程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲 区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品 被生产出来。 3 生产者与消费者生产者与消费者功能描述:功能描述: 3.1 生产者功能描述 在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个 空缓冲区中供消费者线程消费。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者 线程必须等待消费者线程释放出一个空缓冲区。 3.2 消费者功能描述
4、 消费者线程从缓冲区中获得物品,然后释放缓冲区。当消费者线程消费物品时,如果没有满 的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。 3.3 程序结构图: 操作系统课程设计 生产者与消费者算法实现 2 4 数据结构分析数据结构分析 生产者与消费者实现: 这其中主要是通过多线程,来实现生产者和消费者之间的协调问题。 生产者(producer)消费者(consumer): 通过一些记录性变量,来记录模拟实现生产者的行为,通过输入语句的提示 程序采用 OO 设计模式,缓存区采用数组结构存储。 5 生产者与消费者实现代码生产者与消费者实现代码 #include #include const
5、unsigned short SIZE_OF_BUFFER = 10; /缓冲区长度缓冲区长度 unsigned short ProductID = 0; /产品号产品号 unsigned short ConsumeID = 0; /将被消耗的产品号将被消耗的产品号 unsigned short in = 0; /产品进缓冲区产品进缓冲区时的缓冲区下标时的缓冲区下标 unsigned short out = 0; /产品出缓冲区时的缓冲区下标产品出缓冲区时的缓冲区下标 int g_bufferSIZE_OF_BUFFER; /缓冲区是个循环队列缓冲区是个循环队列 bool g_continue
6、 = true; /控制程序结束控制程序结束 HANDLE g_hMutex; /用于线程间的互斥用于线程间的互斥 HANDLE g_hFullSemaphore; /当缓冲区满时迫使生产者等待当缓冲区满时迫使生产者等待 HANDLE g_hEmptySemaphore; /当缓冲区空时迫使消当缓冲区空时迫使消费者等待费者等待 DWORD WINAPI Producer(LPVOID); /生产者线程生产者线程 DWORD WINAPI Consumer(LPVOID); /消费者线程消费者线程 int main() /创建各个互斥信号创建各个互斥信号 g_hMutex = CreateMutex(NULL,FALSE,NULL); g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_B