欢迎来到天天文库
浏览记录
ID:56126592
大小:20.50 KB
页数:3页
时间:2020-06-20
《操作系统实验 系统调用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验六系统调用学时:2学时1.实验内容:系统调用实验2.实验目的:通过调用PV操作解决生产者、消费者问题,了解系统中并发进程是怎样同步执行的。3.实验题目:编写一段程序模拟PV操作实现进程同步,且用PV操作解决生产者、消费者问题。4.实验提示:⑴PV操作由P操作原语和V操作原语组成。P操作原语P(s)将信号量s减1,若s<0则执行原语的进程被置成等待状态。V操作原语V(s)将信号量s加1,若s<=0则释放一个等待的进程。⑵生产者、消费者问题主要解决的是进程并发执行时访问公共变量的问题。假定有一个
2、生产者和一个消费者。生产者每次生产一个产品,并把产品存入共享缓冲区供消费者取走。消费者每次从共享缓冲区取出一个产品去消费。禁止生产者将产品放入已满的缓冲区,禁止消费者从空缓冲区内取产品。⑶模拟程序中对应关系如下:产品数量int_nCurrProductor共享缓冲区大小intMaxBuffer信号量spthread_mutex_t_dealmutexP(s)原语pthread_mutex_lock(&_dealmutex)V(s)原语pthread_mutex_unlock(&_dealmute
3、x)生产一个产品_nCurrProductor++消费一个产品_nCurrProductor--实例代码://进程同步生产者、消费者实例pcustomer.c//运行环境Redhad9.0gcc4.0#include#include#include//产品数量int_nCurrProductor=0;intMaxBuffer=10;//信号灯pthread_mutex_t_dealmutex;void*producer(void*arg
4、){//生产者进程while(1){pthread_mutex_lock(&_dealmutex);//信号灯锁定if(_nCurrProductor>MaxBuffer){printf("当前的产品数[%6d]仓库满了,停止生产产品。",_nCurrProductor);}Else{_nCurrProductor++;//生产一个产品printf("当前的产品数[%6d]生产了一个产品。",_nCurrProductor);}pthread_mutex_unlock(&_dealmut
5、ex);//信号灯解锁sleep(2);}}void*customer(void*arg){//消费者进程while(1){pthread_mutex_lock(&_dealmutex);//信号灯锁定if(_nCurrProductor>0){_nCurrProductor--;//消费一个产品printf("当前的产品数[%6d]消费了一个产品。",_nCurrProductor);}else{printf("当前的产品数[%6d]加快生产速度呀,没有产品了。",_nCurrProd
6、uctor);}pthread_mutex_unlock(&_dealmutex);//信号灯解锁sleep(3);}}intmain(intargc,char**argv){printf("开始!");pthread_mutex_init(&_dealmutex,NULL);//信号灯初始化pthread_tpt1;pthread_tpt2;//建立生产者和消费者进程intpret2=pthread_create(&pt2,NULL,customer,NULL);intpret1=pthr
7、ead_create(&pt1,NULL,producer,NULL);if(pret1!=0
8、
9、pret2!=0){printf("进程创建失败!");exit(1);}while(1){}pthread_join(pt1,NULL);pthread_join(pt2,NULL);printf("结束!");return0;}运行结果:[root@redlinuxys]#gcc-lpthreadpcustomer.c-opcustomer.o[root@redlinuxys]#./pc
10、ustomer.o开始!当前的产品数[0]加快生产速度呀,没有产品了。当前的产品数[1]生产了一个产品。当前的产品数[2]生产了一个产品。当前的产品数[1]消费了一个产品。当前的产品数[2]生产了一个产品。当前的产品数[1]消费了一个产品。当前的产品数[2]生产了一个产品。当前的产品数[3]生产了一个产品。当前的产品数[2]消费了一个产品。当前的产品数[3]生产了一个产品。当前的产品数[2]消费了一个产品。当前的产品数[3]生产了一个产品。当前的产品数[4]生产了一个产品。当前的产品数[3]消费
此文档下载收益归作者所有