集美大学诚毅学院信息工程系实验报告课程名称计算机操作系统序号名称实验四线程同步姓名孙幸杰学号2011957032专业计算1191日期13.11.30成绩教师洪联系评语:200X级XXXX专业集美大学诚毅学院2011~2012学年第一学期1.实验目的:掌握在Linux环境下的线程创建:clone();线程同步:信号灯sem_t实现线程同步与互斥;实现经典同步问题读者-写者问题;2.实验环境Win7系统虚拟机安装的linux系统。3.实验内容用信号灯+PV操作实现读者—写者问题;用clone()函数4个读者线程和4个写者线程;每次读者在共享数据区(缓冲区)读操作,或者写者在共享数据区写操作时,要显示当前正在操作的线程;按读者优先或者写者优先编写程序,但要明确是那个优先;4.实验程序(有详细注释)#includestdio.h#includesemaphore.h#includepthread.h#includestdlib.h#includesched.h//定义信号灯变量sem_tr_w_w;sem_tmutex;intreadCount=0;charinfo[20];//共享数据区intReader(intr_n){charrc[20];while(1){sem_wait(&mutex);readCount++;if(readCount==1){sem_wait(&r_w_w);printf(“FirstreaderinterCR!\n”);}sem_post(&mutex);printf(“%dthreaderisreading:”,r_n);strcpy(rc,info);printf(“%s\n”,rc);sem_wait(&mutex);readCount--;200X级XXXX专业集美大学诚毅学院2011~2012学年第一学期if(readCount==0)sem_post(&r_w_w);printf(“%dthreaderexit.\n”,r_n);sem_post(&mutex);}}intWriter(intw_n){charws[20];sprintf(ws,”%dthwriter”,w_n);while(1){sem_wait(&r_w_w);strcpy(info,ws);sem_post(&r_w_w);}}main(){inti,arg;intclone_flag;char*stack;sem_init(&r_w_w,0,1);sem_init(&mutex,0,1);clone_flag=CLONE_VM|CLONE_SIGHAND|CLONE_FS|CLONE_FILES;for(i=0;i4;i++){arg=i+1;stack=(char*)malloc(4096);clone((void*)Reader,&(stack[4096]),clone_flag,(void*)&arg);stack=(char*)malloc(4096);clone((void*)Writer,&(stack[4096]),clone_flag,(void*)&arg);}exit(1);}5.实验结果及其分析200X级XXXX专业集美大学诚毅学院2011~2012学年第一学期6.实验小结