资源描述:
《操作系统实验报告_学习总结_总结汇报_实用文档》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、课程实验报告课程名称:操作系统原理石柯2016-1-2专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验一:线程的同步1一、实验目的1二、实验内容1三、实验心得4实验二:誉抄问题的进程实现5一、实验目的5二、实验内容5三、实验心得9实验三:Linux文件目录操作11一、实验目的11二、实验内容11三、实验心得13实验一:线程的同步一、实验目的1、掌握Linux系统用户界面中键盘命令的使用。2、学会一种Linux下的编程环境。3、掌握Linux下线程的概念。4、了解Linux线程同步与通信的主要机制,
2、并通过信号灯操作实现线程间的同步与互斥。二、实验内容1、程序要求两个线程,共享公共变量a线程1负责计算(+10)线程2负责打印2、运行环境软件配置:Ubuntu10.04硬件:台式机3、源程序#include#include#include#includc#include#includeintsemid;inta=0;typcdcfunionscnum{intval;structsemid_
3、ds*buf;unsignedshort*array;structscminfo*_buf;)SEM_CTL_UN;voidP(intsemid,intindex)//P操作{structsembufsem;scm.scm_num=index;sem.sem.op=-1;sem.sem_flg=0;semop(semid,&sem,1);voidV(intsemidjntindex)//V操作structscmbufscm;sem.seni_num=index;sem.sem_op=I;sem.sem_flg=0;$e
4、mop(semid,&semJ);void*threadI(void*arg)〃线程1运行函数{inti=0;for(i;i<10;i++){P(semid,0);printf("threadlisaddingH);a=a+10;//每次加10printf(na=%d",a);V(semid,l);}void*thread2(void*arg)〃线程2运行函数(inti=();for(i;i<10;i++){P(semidJ);printf(nthread2isprintingH);printf("a=%d
5、",a);//打印结果V(scmid,0);I}intmain()pthread_tid1,id2;〃线程id号intrctl,rct2;key_tkey;SEM_CTL_UNsemctlargl;SEM_CTL_UNsemctlarg2;key=1;scmid二scmgct(kcy,2,IPC_CREAT
6、0666);〃创建信号量集semctlargl.val=l;semctlarg2.va!=0;semctl(semid,O,SETVAL,semctlarg1);//初始化信号量集scmctl(scmidj,S
7、ETVAL,semctlarg2);ret1=pthread_create(&id1,NULL,thread1,NULL);〃创建线程ret2=pthread_create(&id2,NULLjhread2,NULL);pthrcad」oin(id1,NULL);pthreadJoin(id2,NULL);//等待线程结束}4、实验结果实验结果见图1-1和图1-2:isac@isac-X450VC・/testthreadlisa=10thread2isa=10threadlisa=20thread2isa=20thre
8、adlisa=30thread2isa=30threadlisa=40thread2isa=40threadlisa=50thread2isa=50addingprintingaddingprintingaddingprintingaddingprintingaddingprinting图IT实验结果threadlisa=60thread2isa=60threadlisa=70thread2isa=70threadlisa=80thread2isa=80threadlisa=90thread2isa=90threadl
9、isa=100thread2isa=lO0addingprintingaddingprintingaddingprintingaddingprintingaddingprintingisac@isac-X450VC图1-2实验结果三、实验心得本次实验是在Linux系统下实现线程的同步问题,这算是第一次用c语言写多线程并行程序。创建