网站建设的新闻网站建站在线制作
四:程序题(本小题共3题,每题10分 共30分)
生产消费者问题---关键找到竞争资源的数量情况
1)用多线程、信号量实现生产者和消费者的模拟,仓库容量为10,仓库中开始有3件产品,消费者每3秒消费一件产品,生产者每两秒生产一个产品,生产者和消费者不能同时进入仓库(需要互斥)
1 //信号量---线程间通信
2 //“生产者消费者” 问题
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<unistd.h>
6 #include<semaphore.h>
7 #include<pthread.h>
8 #define msleep(x) usleep(x*1000)
9 #define PRODUCT_SPEED 3 //生产速度
10 #define CONSUM_SPEED 1 //消费速度
11 #define INIT_NUM 3 //仓库原有产品数
12 #define TOTAL_NUM 10 //仓库容量
13
14 sem_t p_sem, c_sem, sh_sem;
15 int num=INIT_NUM;
16
17 void product(void) //生产产品
18 {
19 sleep(PRODUCT_SPEED);
20 }
21
22 int add_to_lib() //添加产品到仓库
23 {
24 num++;//仓库中的产品增加一个
25 msleep(500);
26 return num;
27 }
28
29 void consum() //消费
30 {
31 sleep(CONSUM_SPE