系统平台实验7-线程同步与多线程编程

系统平台实验7-线程同步与多线程编程

ID:8852421

大小:83.00 KB

页数:6页

时间:2018-04-09

系统平台实验7-线程同步与多线程编程_第1页
系统平台实验7-线程同步与多线程编程_第2页
系统平台实验7-线程同步与多线程编程_第3页
系统平台实验7-线程同步与多线程编程_第4页
系统平台实验7-线程同步与多线程编程_第5页
资源描述:

《系统平台实验7-线程同步与多线程编程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验7线程同步与多线程编程一、实验目的通过本实验了解和掌握线程的相关知识,使学生(1)了解系统中线程同步的基本原理。(2)了解和熟悉多线程编程及线程访问控制。二、实验内容1.生产者-消费者问题用信号量实现生产者-消费者问题。分析:信号量的考虑这里使用3个信号量,其中两个信号量empty和full分别用于解决生产者和消费者线程之间的同步问题,mutex是用于这两个线程之间的互斥问题。其中empty初始化为N(缓冲区的单元数),mutex初始化为1,full初始化为0。程序流程如下:1)开始->建立有名管道->打开

2、有名管道->初始化3个信号量->创建消费者和生产者两个线程。2)生产者线程。wait操作(empty)->wait操作(mutex)->写管道->signal操作(full)->signal操作(mutex)。3)消费者线程。请自己实现。源代码:exp71.c#include#include#include#include#include#include#include

3、>#include#include#include#defineFIFO"myfifo"#defineN5intlock_var;time_tend_time;charbuf_r[100];定义buf_r数组表示缓冲区sem_tmutex,full,empty;互斥信号量木特性,信号量empty表示缓冲池中空幻吃区适量,full表示满缓冲区适量intfd;voidproducer(void*arg);voidconsumer(void*arg);6intma

4、in(intargc,char*argv[]){pthread_tid1,id2;pthread_tmon_th_id;intret;end_time=time(NULL)+10;创建管道if((mkfifo(FIFO,0777

5、O_CREAT)<0)&&(errno!=EEXIST))printf("cannotcreatfifoserver");printf("Preparingforreadingbytes");memset(buf_r,0,sizeof(buf_r));打开管道fd=open(F

6、IFO,O_RDWR

7、O_NONBLOCK,0);if(fd==-1){perror("open");exit(1);}初始化互斥信号和emptyfull缓冲区ret=sem_init(&mutex,0,1);ret=sem_init(&empty,0,N);ret=sem_init(&full,0,0);if(ret!=0){perror("sem_init");}ret=pthread_create(&id1,NULL,(void*)producer,NULL);创建生产者线程创建成功返回0if(ret!=

8、0)perror("pthreadcreate1");ret=pthread_create(&id2,NULL,(void*)consumer,NULL);创建消费者线程创建成功返回0.if(ret!=0)perror("pthreadcreate2");pthread_join(id1,NULL);等待生产者线程结束pthread_join(id2,NULL);等待消费者县城结束exit(0);}voidproducer(void*arg){inti,nwrite;while(time(NULL)

9、ime){sem_wait(&empty);空缓冲区的信号量减一6sem_wait(&mutex);互斥信号量减一变为0。if((nwrite=write(fd,"hello",5))==-1){if(errno==EAGAIN)printf("TheFIFOhasnotbeenreadyet,pleasetrylater");}elseprintf("writehellototheFIFO");sem_post(&full);满缓冲区的信号量加一sem_post(&mutex);sleep(1);}}

10、voidconsumer(void*arg){Intnwrite;While(time(NULL)

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

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

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