生产者-消费者同步问题 1 .实验目的 (1)全面理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制
(2)学习使用Linux 线程同步机制解决互斥和同步问题
2 .实验环境 已安装Linux 操作系统的微机一台 3 .实验内容 问题描述:一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息
假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息
功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放数据、取数据等过程
4 .具体设计要求及有关说明 (1)有2 个生产者线程,分别为 P1、P2;有2 个消费者进程,分别是 C1、C2;缓冲区单元个数 N=15; (2)不同的生产者可生产不同的产品(比如字母、数字、符号);不同的消费者可有不同的消费方式(比如“显示”、“打印”、“拼接成字符串”、“改变大小写”等)
自己可任意定义
(3)使用Linux 线程同步:mutex、condition virable 和semaphore 完成上述问题
(4)程序源代码和实验结果如下: #include #include #include sem_t blank_number, product_number; pthread_cond_t full = PTHREAD_COND_INITIALIZER; pthread_cond_t empty = PTHREAD_COND_INITIALIZER; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; #define NUM 15 struct P_Queue { char productc[NUM]; int front, re