版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统概念第七版中的实验项目:生产者消费者问题。本程序中,main() 函数需要三个参数:主线程休眠时间;生产者线程数;消费者线程数。各线程的休眠等待时间是随机的。程序代码:#include #include #include #include #define buffer_size 5 typedef int buffer_item; struct v ( int i; ;buffer_item bufferbuffer_size+1; buffer_item front=0,rear=0; handle mutex,empty,full; int insert_item(buffer_i
2、tem item) ( /*insert item into buffer return 0 if successful,otherwise return -1 indicating an error condition*/ if(rear+1)%(buffer_size+1)=front) return 1; bufferrear=item; rear=(rear+1)%(buffer_size+1); return 0; int remove_item(buffer_item *item) ( /*remove an object from buffer placing it in ite
3、m return 0 if successful,otherwise reutrn -1 indication an error condition */ if(front = rear) return 1; *item=bufferfront; front=(front+1) % (buffer_size+1); return 0; dword winapi producer(pvoid param) ( int rand1; struct v data=*(struct v *)param; srand(unsigned)time(0); while (1) ( sleep(rand()%
4、101*10); waitforsingleobject(empty,infinite); waitforsingleobject(mutex,infinite); randl =rand(); n”,rand1,data.i);if(insert_item(rand1) printf(insert data error!n); releasemutex(mutex); releasesemaphore(full,1,null); dword winapi consumer(pvoid param) ( int rand1; struct v data=*(struct v *)param;
5、srand(unsigned)time(0); while (1) ( sleep(rand()%101*10); waitforsingleobject(full,infinite); waitforsingleobject(mutex,infinite); if(remove_item(&rand1) printf(remove data error! n); else printf(consumer consumed %d by %d n,rand1,data.i); releasemutex(mutex); releasesemaphore(empty,1,null); int
6、 main(int argc,char *argv) ( /*get command line arguments argv1)(the number of producer threads),argv2(the number of consumer threads),argv3(sleep time)*/ /*initialize buffer*/ int sleeptime,pnum,snum; int *threadidp,*threadids,i; struct v *countp,*counts; handle *threadhandlep,*threadhandles; sleep
7、time=atoi(argv1); pnum=atoi(argv2); snum=atoi(argv3); /*srand(time(null); sleeptime=9000; pnum=3; snum=3;*/ threadhandlep=(handle * )malloc(pnum * sizeof(handle); threadhandles=(handle * )malloc(snum * sizeof(handle); threadidp=(int * )malloc(pnum * sizeof(int); threadids=(int * )malloc(pnum * sizeo
8、f(int); mutex=createmutex(null,false,null); empty=createsemaphore(null,buffer_size,buffer_size,null); full=createsemaphore(null,0,buffer_size+1,null); /*create producer thread(s)*/ countp=(struct v *)malloc(pnum+1)*sizeof(struct v); counts=(struct v *)malloc(snum+1)*sizeof(struct v); for(i=0;ipnum;i
9、+) ( countpi+1.i=i+1; threadhandlepi=createthread(null,0,producer,&countpi+1,0,&threadidpi); /*create consumer thread(s)*/ for(i=0;isnum;i+) ( countsi+1.i=i+1; threadhandlesi=createthread(null,0,consumer,&countsi+1,0,&threadidsi); /*sleep*/ sleep(sleeptime); /*exit*/ return 0; #inclu
10、de stdafx.h #include #include #include #include #define buffer size5 typedef int buffer_item struct v int i ; ; buffer_item buffer buffer_size1; buffer_item front =0, rear =0; handlemutex, empty, full ; int insert_item ( buffer_item item ) /*insert item into buffer return 0 if successful,otherwise r
11、eturn -1 indicating an error condition*/ if ( rear +1)%(buffer_size1)= front ) return 1; buffer rear = item ; rear =( rear +1)%(buffer_siz+1); return 0; int remove_item ( buffer_item * item ) /*remove an object from buffer placing it in item return 0 if successful,otherwise reutrn -1 indication an e
12、rror condition */ if (front = rear ) return 1; * item =buffer front ; front =(front +1) % ( buffer_siz+1); return 0; dworwinapi producer (pvoid param) int rand1 ; struct v data =*( struct v *) param; srand ( unsigned )time (0); while (1) ( sleep( rand ()%101*10); waitforsingleobject ( empty, infinit
13、e ); waitforsingleobject ( mutex, infinite ); rand1 = rand (); printf ( producer has producerd %d by %dn , rand1 , data . i ); if ( insert_item ( rand1 ) printf ( insert data error!n ); releasemutex (mutex); releasesemaphore(full ,1, null; dworwinapi consumer(pvoid param) ( int rand1 ; struct v data
14、 =*( struct v *) param; srand ( unsigned ) time (0); while (1) ( sleep( rand ()%101*10); waitforsingleobject ( full , infinite ); waitforsingleobject ( mutex, infinite ); if ( remove_item (& rand1 ) printf ( remove data error! n ); else printf ( consumer consumed %d by %d n , rand1 , data . i );
15、 releasemutex (mutex); releasesemaphore(empty,1, null); int main( int argc , char * argv ) ( /*get command line arguments argv1)(the number of producer threads),argv2(the number of consumer threads),argv3(sleep time)*/ /*initialize buffer*/ int sleeptime , pnum, snum; dwor*dthreadidp ,* threadids ,
16、i ; struct v * countp ,* counts ; handle threadhandlep ,* threadhandles ; /*sleeptime=atoi(argv1); pnum=atoi(argv2); snum=atoi(argv3);*/ /srand(time(null); sleeptime =9000; pnum=3; snum=3; threadhandlep =(handle* ) malloc (pnum* sizeof (handle; threadhandles =(handle* ) malloc (snum * sizeof (handle
17、; threadidp =(dword) malloc (pnum * sizeof ( dword threadids =(dword) malloc (pnum * sizeof ( dwofrd mutex=createmutex (null false null; empty=createsemaphore( null buffer_sizebuffer_sizenull; full =createsemaphore( null。,buffer_siz+1, null; /*create producer thread(s)*/ countp =( struct v *) malloc ( pnum+1)* sizeof (struct v); counts =( struct v *) malloc ( snum+1)* sizeof (struct v); for (i =0; i pnum i +) ( countp i +1. i =i +1; threadhandlep i = createthread
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木工机械日常点检表
- 贵州省湄潭县湄江中学2025届高三第四次模拟考试语文试题试卷含解析
- 阜新市重点中学2025年第二学期期末学生学业质量监测高三语文试题含解析
- 福建省龙岩一中2025届高考语文试题查漏补缺题含解析
- 福建省德化一中、永安一中、漳平一中2024-2025学年高三4月一模语文试题含解析
- 二年级数学计算题专项练习1000题汇编集锦
- 北京市西城区41中2025届招生全国统一考试仿真卷(二)-高考语文试题仿真试题含解析
- 北京2025年高考最后冲刺模拟(一)语文试题含解析
- 临夏地区无偿献血中脂肪血的产生因素及预防措施-国际临床研究杂志
- 第十二单元化学与生活(讲义)中考化学一轮复习(人教版)
- 股东退出机制协议
- 男性公民兵役登记表.docx
- 水泥搅拌桩首件施工总结
- 农业企业会计账务处理(DOC83页)
- 公安群众工作精品课件
- JJF1659-2017PM2.5质量浓度测量仪校准规范(高清版)
- 降水与等降水量线
- 《石油库设备管理》PPT课件.ppt
- 龙盘工程简介多媒体
- 初中数学核心素养下的教学设计研究
- 人工拖电缆安全技术措施
评论
0/150
提交评论