实验报告_Linux线程、互斥

实验报告_Linux线程、互斥

ID:39615672

大小:125.00 KB

页数:7页

时间:2019-07-07

上传者:U-2441
实验报告_Linux线程、互斥_第1页
实验报告_Linux线程、互斥_第2页
实验报告_Linux线程、互斥_第3页
实验报告_Linux线程、互斥_第4页
实验报告_Linux线程、互斥_第5页
资源描述:

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

四川大学计算机学院、软件学院实验报告课程名称 操作系统课程设计实验课时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能够同时容纳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,定义两个缓冲区和几个辅助的全局变量,编写三个线程函数,分别完成缓冲区的读写。读写缓存时使用信号量。(2)在主函数中使用pthread_create(),pthread_join()创建和设置三个线程。(3)完整代码如下(包含调试信息):#include#include#include#includeintbuf1[3];//2buffersintbuf2[3];intfence1=0;//tomarktheindexforwritingdataintfence2=0;sem_tsem1;//2semaphoressem_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);//delayisnotaccessableinlinux//,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(&delay2);}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;//clearthebufferbuf2[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_create(&id1,NULL,(void*)thread1,NULL);pthread_create(&id2,NULL,(void*)thread2,NULL);pthread_create(&id3,NULL,(void*)thread3,NULL);pthread_join(id1,NULL);pthread_join(id2,NULL);pthread_join(id3,NULL);return0; }(1)编译运行number.c,注意使用“-lpthread”。运行结果截图。(图1.1)(2)对三个线程中的延迟时间参数进行修改,重新编译运行文件。运行结果截图。(图1.2)(3)比较前后两次的结果:只有线程1、2写数据完成的时间不一样。 实验结果的截图Lab1---图1.1:运行结果截图(包含部分调试信息)图1.2:修改延迟时间参数后的运行结果截图 小结通过本实验,我掌握了:简单的多线程编程方法,和几个基本pthread函数的功能用法。目前我存在的问题有:对线程间切换的具体机制还有些不清楚。指导老师评议成绩评定:指导教师签名:

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

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

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