下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Linux系统分析》实验报告报告提交日期:姓名:程志超学号:128355003班级:交换生一、实验题目采用多线程互斥与同步机制,实现读者、写者问题二、实验目的掌握使用POSIX接口提供的互斥变量、条件变量实现多线程同步三、实验要求有一个文件为多个并发线程所共享,其中读线程只要求读取文件内容,写线程则要求修改文件容,允许多个线程同时读取文件内容。但若有一个写线程在写,则其他读线程不能读;若有一个写线程在写或有其他读线程在读,则其他写线程均被拒绝。当一个写线程正在写,而有多个读线程与写线程在等待时,写线程应优先唤醒。读线程进去读、等待,写线程进去写、等待等状态均在屏幕上打印出来四、设计思路和流程图(对于涉及算法的实验,需要提供数据结构及其说明、测试数据的设计及测试结果分析)数据结构的说明structprodcons{ intbuffer[BUFFERSIZE]; //缓冲区 pthread_mutex_tlock; //互斥锁 intreadpos,writepos; //读写的游标 pthread_cond_tnotempty; //缓冲区非空条件判断 pthread_cond_tnotfull; //缓冲区非满条件判断};测试结果:读和写的线程交互进行五、实验体会(包括实验中遇到的问题及解决过程、产生的错误及原因分析)对线程条件变量控制相关函数pthread_cond_init()、pthread_cond_wait()和pthread_cond_signal()的原型及用法不是很了解,上网查阅相关资料,明白第一个是初始化一个条件变量,第二个等待线程,尤其要注意线程状态和条件变量的加解锁过程是/*block-->unlock-->wait()return-->lock*/程序清单(包括源程序、makefile、readme)/***multithread.c***/#include<stdio.h>#include<pthread.h>#defineBUFFERSIZE100#defineOVER(-1)structprodcons{ intbuffer[BUFFERSIZE]; pthread_mutex_tlock; intreadpos,writepos; pthread_cond_tnotempty; pthread_cond_tnotfull;};voidinit(structprodcons*b){ pthread_mutex_init(&b->lock,NULL); pthread_cond_init(&b->notempty,NULL); pthread_cond_init(&b->notfull,NULL); b->readpos=0; b->writepos=0;}voidput(structprodcons*b,intdata){ pthread_mutex_lock(&b->lock); if((b->writepos+1)%BUFFERSIZE==b->readpos){ pthread_cond_wait(&b->notfull,&b->lock); } b->buffer[b->writepos]=data; b->writepos++; if(b->writepos>=BUFFERSIZE) b->writepos=0; pthread_cond_signal(&b->notempty); pthread_mutex_unlock(&b->lock);}intget(structprodcons*b){ intdata; pthread_mutex_lock(&b->lock); if(b->writepos==b->readpos){ pthread_cond_wait(&b->notempty,&b->lock); } data=b->buffer[b->readpos]; b->readpos++; if(b->readpos>=BUFFERSIZE) b->readpos=0; pthread_cond_signal(&b->notfull); pthread_mutex_unlock(&b->lock); returndata;}structprodconsbuffer;void*producer1(void*data){ intn; for(n=0;n<10000;n++){ //printf("%d\n",n); printf("producer1iswriting\n"); put(&buffer,n); } put(&buffer,OVER); returnNULL;}void*producer2(void*data){ intn; for(n=0;n<10000;n++){ //printf("%d\n",n); printf("producer2iswriting\n"); put(&buffer,n); } put(&buffer,OVER); returnNULL;}void*consumer1(void*data){ intd; while(1){ d=get(&buffer); if(d==OVER) break; //printf("%d\n",d); printf("consumer1isreading\n"); } returnNULL;}void*consumer2(void*data){ intd; while(1){ d=get(&buffer); if(d==OVER) break; //printf("%d\n",d); printf("consumer2isreading\n"); } returnNULL;}intmain(void){ pthread_twriter1,reader1,writer2,reader2; void*retval; init(&buffer); pthread_create(&writer1,NULL,producer1,0); pthread_create(&reader1,NULL,consumer1,0); pthread_create(&writer2,NULL,producer2,0); pthread_create(&reader2,NULL,c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年四川省道德与法治初三考前冲刺卷(含答案)
- 2027年山东省语文九年级基础过关卷(含答案)
- 冲刺终点线 2027年中考河南省语文中考人教版考前回归卷(含答案)
- 2027年湖南省语文中考考前回归卷(含答案)
- 2027年陕西省语文初三鲁教版押题密卷(含答案)
- 2027年陕西省英语初三考前30天加分卷(含答案)
- 2027届湖北省道德与法治九年级北师大版考前30天加分卷(含答案)
- 2027年上海市道德与法治初三考前提分模拟卷(含答案)
- 2026 四川事业编医疗岗 历年真题试卷 含解析
- 2026 综合岗面试考点梳理 含答案
- UOM无人机安全操控理论合格证(2026)题库+答案详解
- 统编版初中道德与法治九年级上册6.3文化自信日益增强 议题式教学课件(共35张)+内嵌视频
- LW36-126型户外自能式高压六氟化硫断路器安装使用说明书
- 血液透析用中心静脉导管护理专家共识(2025版)
- 防范消费陷阱宣传课件
- 高校教师资格证之高等教育学完整版及答案【历年真题】
- 手术室质控培训课件内容
- 村内街巷硬化施工技术交底
- 2025年中国安防行业发展研究报告
- 全国大学生职业规划大赛《水利水电工程》专业生涯发展展示
- 6.2 学会依法办事 课件-2025-2026学年统编版道德与法治 八年级上册
评论
0/150
提交评论