资源描述:
《实验七——线程同步及多线程编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验七线程同步与多线程编程实验目的:1.了解系统中线程同步的基本原理。2.了解与熟悉多线程编程与线程访问控制。实验内容及步骤:1.生产者与消费者问题:①截图与分析源程序:程序代码注释:#include#include#inelude#include#include#includevsys/ipc・h>#include#include#include#includeh>#defineFIFO"myfifo"#defi
2、neN5intlock_var;time_tend_time;charbuf_r[100];//定义buf_r数组表示缓冲区sem_tmutex,fulhempty;//互斥信号量mutex,信号量empty表示缓冲池中空缓冲区数量,full表示满缓冲区数量intfd;voidproducer(void*arg);voidconsumer(void*arg);intmain(intargc^char*argv[]){pthread_tidl,id2;pthread_tmon_th_id;intret;end_time=time(NULL)+10;/*createanamedpipe*/
3、〃创建管道if((mkfifo(FIFO,0777
4、O_CREAT)<0)&&(errno!=EEXIST))printf(ncannotcreatfifoserveru);printf(11Preparingforreadingbytes,f);memset(buf_r,0,sizeof(buf_r));/*openthepipe*/〃打开管道fd=open(F!FO,O_RDWR
5、O_NONBLOCK,0);if(fd==-l){perror(nopenH);exit(l);}/^initializethemutexto1*/〃初始化互斥信号量与empty,full缓冲区r
6、et=sem_init(&mutex,O,l);ret=seni_init(&empty,0,N);ret=sem_init(&full,O,O);if(ret!=O){perror(**sem_init*1);}ret=pthread_create(&idl,NULL,(void*)producer,NULL);//创建producer线程,创建成功返回0if(ret!=O)perror(npthreadcreater1);ret=pthread_create(&id2,NULL,(void*)producer,NULL);//仓U建consumer线程,创建成功返回0if(ret!
7、=O)perror(npthreadcreate2n);pthreadJoin(idl,NULL);//等待producer线程结束pthread_join(id2,NULL);//等待consumer线程结束exit(O);}voidproducer(void*arg){inti,nwrite;while(time(NULL)8、printf('*TheFIFOhasnotbeenreadyet,pleasetrylatern);}elseprintf(HwritehellototheFIFOn);sem_post(&mutex);//互斥信号量值加1变回1,释放资源sem_post(&full);〃满缓冲区的信号量值加1sleep⑴;voidconsumer(void*arg)intnwrite;while(time(NULL)9、ite(fd/,hello,5))==-l){if(errno==EAGAIN)printf(HTheFIFOhasnotbeenreadyet,pleasetrylaterf,);printf(nreadhellototheFIFOtr);sem_post(&mutex);//互斥信号量值加1变回1sem_post(&empty);//空缓冲区的信号量值加1,对资源释放sleep(l);}}程序分析:主函数的主要功能是创建管道,然后