欢迎来到天天文库
浏览记录
ID:39615672
大小:125.00 KB
页数:7页
时间:2019-07-07
《实验报告_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
此文档下载收益归作者所有