资源简介
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者不断地从缓冲中读取一个字符并输出。为了使得程序的输出易于看到结果,仿照的实例程序,分别在生产者和消费者进程的合适的位置加入一些随机睡眠时间。
可选的实验:在上面实验的基础上实现部分消费者有选择地消费某些产品。例如一个消费者只消费小写字符,一个消费者只消费大写字母,而另一个消费者则无选择地消费任何产品。消费者要消费的产品没有时,消费者进程被阻塞。注意缓冲的管理。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 15
struct shared{
int written;
char text[maxn];
int inout;
};
union semun{
int val;
struct semid_ds *buf;
unsigned short *arry;
};
int Vsem(int semidint sem_num){
struct sembuf buf={sem_num+1SEM_UNDO};
if(semop(semid&buf1)==-1){
perror(“V failed.\n“);
return 0;
}
return 1;
}
int Psem(int semidint sem_num){
struct sembuf buf={sem_num-1SEM_UNDO};
if(semop(semid&buf1)==-1){
perror(“P failed.\n“);
return 0;
}
return 1;
}
int main()
{
//
key_t key;
char * path = “/home/crazycat/123“;
key = ftok(path 1);
if(key==-1)perror(“key error.\n“);
//
int shmid = shmget(key sizeof(struct shared) IPC_CREAT|0604);
if(shmid==-1) perror(“shmid error.\n“);
//
int semid = semget(key 4 IPC_CREAT|0666);
if(semid==-1){
printf(“%s\n“strerror(errno));
return 0;
}
union semun arg;
arg.val = 1;
semctl(semid 0 SETVAL arg); //mutex1
arg.val=1;
semctl(semid 1 SETVAL arg); //mutex2
arg.val=0;
semctl(semid 2 SETVAL arg); //full_sem
arg.val=maxn;
semctl(semid 3 SETVAL arg); //empty_sem
//
struct shared * cache;
if ((cache = (struct shared *)shmat(shmid NULL 0)) == (void *)-1) {
perror(“shmat error.\n“);
}
cache->written=0;
cache->in=0;
cache->out=0;
//
pid_t pid[5];
int i;
for(i=0;i<5;i++){
pid[i]=f
- 上一篇:单片机数字钟+万年历数码管显示
- 下一篇:海思ADC驱动源码
相关资源
- 计算机操作系统习题答案(汤子瀛)
- 2016东华大学燕彩蓉操作系统实验七
- 东北大学Linux操作系统大实验
- 操作系统实验 华工 Linux
- 时间片轮转调度算法
- 操作系统课程设计——主存空间的分
- 四川大学操作系统实验课件
- 操作系统各大公司笔试题汇总.doc
- 操作系统 进程调度时间片轮转银行家
- 操作系统进程管理实验报告
- 华中科技大学计算机学院操作系统一
- 四川大学操作系统实验报告week1
- 操作系统课程设计报告(完成版
- 操作系统win7和winXP纯净版iso镜像文件
- 2020智慧树知到《计算机操作系统》章
- 银行家算法的设计与实现 操作系统课
- 在Linux环境下模拟实现命令解释器--操
- 计算机 操作系统 课程设计
- 操作系统 段页式存储器管理
- Linux操作系统设计实践报告一
- 操作系统实验模拟操作系统的页面置
- 动态优先数高者进程调度算法
- 中科方德桌面操作系统镜像文件百度
- 操作系统临界区资源模拟
- uclinux详细的中文学习资料
- 操作系统课程设计-实现系统状态监测
- 哈工大操作系统实验:字符显示的控
- 操作系统课设,生产者消费者演示程
- 操作系统思考题答案
- 操作系统课后答案郁红英版
评论
共有 条评论