电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

linux生产者消费者VIP免费

linux生产者消费者_第1页
1/7
linux生产者消费者_第2页
2/7
linux生产者消费者_第3页
3/7
生产者-消费者同步问题 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, rear; int num; }; void *producer1(void *arg) { struct P_Queue *q; q = (struct P_Queue *) arg; while (1) { pthread_mutex_lock(&lock); while (q->num == NUM) { pthread_cond_wait(&full, &lock); } sem_wait(&blank_number); char c = rand() % 26 + 'a'; q->rear = (q->rear + 1) % NUM; q->productc[q->rear] = c; printf("缓冲池1 的产品是:%c\n", q->productc[q->rear]); q->num++; printf("产品数量:%d\n", q->num); sem_post(&product_number); if (q->num == 1) { pthread_cond_signal(&empty); } pthread_mutex_unlock(&lock); sleep(rand() % 2); } } void *producer2(void *arg) { struct P_Queue *q; q = (struct P_Queue...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

linux生产者消费者

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部