实验七——线程同步及多线程编程

实验七——线程同步及多线程编程

ID:41614337

大小:212.90 KB

页数:8页

时间:2019-08-28

实验七——线程同步及多线程编程_第1页
实验七——线程同步及多线程编程_第2页
实验七——线程同步及多线程编程_第3页
实验七——线程同步及多线程编程_第4页
实验七——线程同步及多线程编程_第5页
资源描述:

《实验七——线程同步及多线程编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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);}}程序分析:主函数的主要功能是创建管道,然后

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。