实验报告_Linux线程、互斥

实验报告_Linux线程、互斥

ID:39615672

大小:125.00 KB

页数:7页

时间:2019-07-07

实验报告_Linux线程、互斥_第1页
实验报告_Linux线程、互斥_第2页
实验报告_Linux线程、互斥_第3页
实验报告_Linux线程、互斥_第4页
实验报告_Linux线程、互斥_第5页
资源描述:

《实验报告_Linux线程、互斥》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、四川大学计算机学院、软件学院实验报告课程名称 操作系统课程设计实验课时1实验项目Linux线程、互斥实验时间2012年4月1日星期一实验目的1)线程的基本操作函数2)简单的多线程编程实验环境X86,WindowsXP,VMwareWorkstation5.0.0,RedHatLinux,SSHSecureShellClient-3.2.9实验内容(算法、程序、步骤和方法)Lab1---用信号量实现如下程序:¨初始化线程1,初始化内容为10个数,分别为:12345678910,每隔1秒钟,线程1向共享区域buf1写入一个数,直到10个数写完,buf1能够同时容纳

2、3个int,并打印写入完毕信息;¨初始化线程2,初始化内容为10个数,分别为:-1-2-3-4-5-6-7-8-9-10,每隔2秒钟,线程2向共享区域buf2写入一个数,直到10个数写完,buf2能够同时容纳3个int,并打印写入完毕信息;¨初始化线程3,每隔3秒钟去读共享区buf1和buf2,读出数据,并按照线程1第一个数对应线程2第一个数,一一对应方式,计算读出数据的加法、乘法结果,并将结果打印出来。¨在线程1隔2秒,线程2隔3秒,线程3隔1秒情况下,再运行程序,确保两种条件下运行程序的最终结果一致。(1)编写程序number.c,定义两个缓冲区和几个辅助

3、的全局变量,编写三个线程函数,分别完成缓冲区的读写。读写缓存时使用信号量。(2)在主函数中使用pthread_create(),pthread_join()创建和设置三个线程。(3)完整代码如下(包含调试信息):#include#include#include#includeintbuf1[3];//2buffersintbuf2[3];intfence1=0;//tomarktheindexforwritingdataintfence2=0;sem_tsem1;//2sem

4、aphoressem_tsem2;voidthread1(){inti;//structtimespecdelay1;//delay1.tv_sec=1;sem_init(&sem1,1,3);//initializethesemaphorewithvalue3for(i=0;i<10;i++){sem_wait(&sem1);//waituntilthereareemptyindexesbuf1[fence1]=i+1;//writedatafence1=(fence1+1)%3;//movethefencesleep(1);//delayisnotacce

5、ssableinlinux//,sousingsleepinstead//pthread_delay_np(&delay1);}printf("buf1finisheswritten.");}voidthread2(){inti;//structtimespecdelay2;//delay2.tv_sec=2;sem_init(&sem2,1,3);for(i=0;i<10;i++){sem_wait(&sem2);buf2[fence2]=-(i+1);fence2=(fence2+1)%3;sleep(2);//pthread_delay_np(&de

6、lay2);}printf("buf2finisheswritten.");}voidthread3(){//structtimespecdelay3;inti;inta;intb;intmark1=0;intmark2=0;//delay3.tv_sec=3;for(i=0;i<10;i++){sem_post(&sem1);//addthe2semaphoressem_post(&sem2);a=buf1[mark1];//read2numbersfrom2buffersb=buf2[mark2];buf1[mark1]=0;//clearthebuf

7、ferbuf2[mark2]=0;//outputprintf("[DebuggingInfo:]");printf("a=%d,b=%d",a,b,mark1,mark2);printf("sum=%d,product=%d",a+b,a*b);mark1=(mark1+1)%3;mark2=(mark2+1)%3;sleep(3);//pthread_delay_np(&delay3);}}intmain(){inti;pthread_tid1;pthread_tid2;pthread_tid3;//create3threadspthread_cr

8、eate(&id1,NULL,(voi

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

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

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