ImageVerifierCode 换一换
格式:DOC , 页数:48 ,大小:216.50KB ,
资源ID:4457542      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4457542.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(Linux程序设计报告.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Linux程序设计报告.doc

1、Linux程序设计报告432020年4月19日文档仅供参考Linux程序设计课程设计 Linux程序设计课程组长春工业大学 -12-24课程设计任务书课程设计题目:读者写者问题的设计、实现及性能分析起止日期: .12.25- .12.29设计地点:计算机科学与工程学院机房任务:1. Linux环境下分别设计并实现读者写者问题的读者优先算法、写者优先算法和无优先算法,针对测试数据得出每种算法下读者线程和写者线程的开始操作时刻和结束操作时刻;2. 计算每个线程的等待时间、周转时间、总的等待时间、总的周转时间、读者总的等待时间、读者总的周转时间、写者总的等待时间、写者总的周转时间、平均等待时间、平均

2、周转时间;3. 使用适当的可视化方法(例如甘特图)对计算结果进行可视化;4. 比较三种算法的性能。日程:本次设计共一周时间,参考日程安排如下:第1天:读者优先算法设计、实现与测试;第2天:写者优先算法设计、实现与测试;第3天:无优先算法设计、实现与测试;第4天:测试结果可视化及算法性能比较;第5天:答辩。报告:仅写自己完成的设计成果,包括:1 充分注释的源代码(未写代码者略去)2 测试结果3 结果可视化4 性能比较5 参考文献6 心得指导教师:150408 焦素云 150409 王俊华目录第1章 设计要求12.1设计目的12.2设计要求1第2章 测试数据设计2第3章 算法实现3第4章 算法结果

3、3第5章 结果可视化4第6章 性能分析4参考文献4心得4第1章 设计要求2.1设计目的理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法。2.2设计要求在linux环境下编写应用程序,该程序运行时能创立N个线程,其中既有读者线程又有写者线程,它们按照事先设计好的测试数据进行读写操作。读者/写者问题描述如下:有一个被许多进程共享的数据区,这个数据区能够是一个文件,或者主存的一块空间,甚至能够是一组处理器寄存器。有一些只读取这个数据区的线程(reader)和一些只往数据区中写数据的线程(writer)。以下假设共享数据区是文件。这些读者和写者对数据区的操作必须满足以下条件:读读允

4、许;读写互斥;写写互斥。这些条件具体来说就是:(1)任意多的读线程能够同时读这个文件;(2)一次只允许一个写线程往文件中写;(3)如果一个写线程正在往文件中写,禁止任何读线程或写线程访问文件;(4)写线程执行写操作前,应让已有的写者或读者全部退出。这说明当有读者在读文件时不允许写者写文件。对于读者-写者问题,有三种解决方法:1、读者优先除了上述四个规则外,还增加读者优先的规定,当有读者在读文件时,对随后到达的读者和写者,要首先满足读者,阻塞写者。这说明只要有一个读者活跃,那么随后而来的读者都将被允许访问文件,从而导致写者长时间等待,甚至有可能出现写者被饿死的情况。2、写者优先除了上述四个规则外

5、,还增加写者优先的规定,即当有读者和写者同时等待时,首先满足写者。当一个写者声明想写文件时,不允许新的读者再访问文件。3、无优先除了上述四个规则外,不再规定读写的优先权,谁先等待谁就先使用文件。第2章 测试数据设计表1 测试数据线程名称申请时刻持续使用时间r1015r2115w133r342w256w3610r478r592w41018w5122为了验证算法的正确性,需要设计测试数据,并对测试数据进行分析,总结出在该组测试数据下,程序应该得到什么结果,然后运行程序,将程序运行结果与分析结果相比较,如果二者一致,则可认为程序是正确的。作者设计的测试数据如表1所示,包括10个线程,其中有5个读者线

6、程r1r5,另外5个是写者线程w1w5。读者线程r1在时刻0提出读请求,如果请求得到允许,r1将用15秒的时间读文件;写者线程w3在时刻6提出写请求,如果请求得到允许,w3将用10秒的时间写文件。从表中能够看出,10个线程提出请求的次序是:r1,r2,w1,r3,w2,w3,r4,r5,w4,w5。(1)读者优先算法线程实际读写文件顺序为:r1,r2,r3,r4,r5,w1,w2,w3,w4,w5。执行情况见表2。表2 线程的运行状况线程名称申请时刻持续时间开始操作时刻结束操作时刻r1015015r2115116r34246r478715r592911w1331619w2561925w3610

7、2535w410183553w51225355(2)写者优先算法线程实际读写文件顺序为:r1,r2,w1,w2,w3,w4,w5,r3,r4,r5。执行情况见表3。表3 线程的运行状况线程名称申请时刻持续时间开始操作时刻结束操作时刻r1015015r2115116w1331619w2561925w36102535w410183553w51225355r3425557r4785563r5925557(3)无优先算法线程实际读写文件顺序为:r1,r2,w1,r3,w2,w3,r4,r5,w4,w5。执行情况见表4。表4 线程的运行状况线程名称申请时刻持续时间开始操作时刻结束操作时刻r1015015

8、r2115116w1331619r3421921w2562127w36102737r4783745r5923739w410184563w51226365第3章 算法实现读者优先算法:#include #include #include #include #include #include #include #define MAX_THREAD 10#define SNL 8typedef structchar tn3; /name of threadunsigned int rm; /the moment when this thread request to access data.unsi

9、gned int pt; /duration of operationunsigned int i; /same to rmunsigned int b; /instance at which this thread begin to operate dataunsigned int e; /ending instanceTEST_INFO;/TEST_INFO test_dataMAX_THREAD;typedef struct char snSNL+1; /student numberTEST_INFO tiMAX_THREAD; /test itemTI; /test_item_for_

10、student/TI test_itemsSTUDENTS;TI test_item= 2566,w1, 4,7,r1,11,14,r2,1,5,w2,8,11,w3,15,2,r3,5,8,r4,12,15,w4,5,2,r5,9,12,r6,15,3;char r_seqMAX_THREAD3;char o_seqMAX_THREAD3;int sr=0;int so=0;int rc=0; /count how many readers are readingpthread_mutex_t cs_d; /guarentee mutually access datapthread_mute

11、x_t cs_rc; /guarentee mutually access rcpthread_mutex_t cs_sr; /guarentee mutually access srpthread_mutex_t cs_so; /guarentee mutually access srtime_t base; /the moment when function main begin/*void print_answer()int i;printf(%sn,test_item.sn);printf(name r_m p_t i_t b_t e_tn);for(i=0;iMAX_THREAD;i

12、+)printf(%4s%4d%4d%8d%8d%8dn,(test_item.ti)i.tn,(test_item.ti)i.rm,(test_item).tii.pt,(test_item.ti)i.i,(test_item.ti)i.b,(test_item.ti)i.e);printf(r_seq:);for(i=0;iMAX_THREAD;i+)printf(%4s,r_seqi);printf(n);printf(o_seq:);for(i=0;iMAX_THREAD;i+)printf(%4s,o_seqi);printf(n);*/void save_answer(FILE *

13、f)int i;fprintf(f,t%s_answer.txtntr/w problem:read firstnn,test_item.sn);fprintf(f,name r_m p_t i_t b_t e_tn);for(i=0;iMAX_THREAD;i+)fprintf(f,%4s%4d%4d%8d%8d%8dn,(test_item.ti)i.tn,(test_item.ti)i.rm,(test_item).tii.pt,(test_item.ti)i.i,(test_item.ti)i.b,(test_item.ti)i.e);fprintf(f,n);fprintf(f,r_

14、seq:);for(i=0;iMAX_THREAD;i+)fprintf(f,%4s,r_seqi);fprintf(f,n);fprintf(f,o_seq:);for(i=0;irm); gettimeofday(&t,NULL); (TEST_INFO *)td)-i=difftime(t.tv_sec,rl); pthread_mutex_lock(&cs_sr); strcpy(r_seqsr+,(TEST_INFO *)td)-tn); pthread_mutex_unlock(&cs_sr); pthread_mutex_lock(&cs_rc); rc+; if(rc=1)pt

15、hread_mutex_lock(&cs_d); pthread_mutex_unlock(&cs_rc); gettimeofday(&t,NULL); (TEST_INFO *)td)-b=difftime(t.tv_sec,rl); pthread_mutex_lock(&cs_so); strcpy(o_seqso+,(TEST_INFO *)td)-tn); pthread_mutex_unlock(&cs_so); sleep(TEST_INFO *)td)-pt); gettimeofday(&t,NULL); (TEST_INFO *)td)-e=difftime(t.tv_s

16、ec,rl); pthread_mutex_lock(&cs_rc); rc-; if(rc=0)pthread_mutex_unlock(&cs_d); pthread_mutex_unlock(&cs_rc); return 0;void *w(void *td) struct timeval t; time_t wl=base; sleep(TEST_INFO *)td)-rm); gettimeofday(&t,NULL); (TEST_INFO *)td)-i=difftime(t.tv_sec,wl); pthread_mutex_lock(&cs_sr); strcpy(r_se

17、qsr+,(TEST_INFO *)td)-tn); pthread_mutex_unlock(&cs_sr); pthread_mutex_lock(&cs_d); gettimeofday(&t,NULL); (TEST_INFO *)td)-b=difftime(t.tv_sec,wl); pthread_mutex_lock(&cs_so); strcpy(o_seqso+,(TEST_INFO *)td)-tn); pthread_mutex_unlock(&cs_so); sleep(TEST_INFO *)td)-pt); gettimeofday(&t,NULL); (TEST

18、_INFO *)td)-e=difftime(t.tv_sec,wl); pthread_mutex_unlock(&cs_d); return 0;void create_exam()int i=0;pthread_t htMAX_THREAD;pthread_mutex_init(&cs_d,NULL);pthread_mutex_init(&cs_rc,NULL);pthread_mutex_init(&cs_sr,NULL);pthread_mutex_init(&cs_so,NULL);struct timeval t;gettimeofday(&t,NULL);base=t.tv_

19、sec;for(i=0;iMAX_THREAD;i+)if(test_item.ti)i.tn0=r)pthread_create(&hti,NULL,r,&(test_item.ti)i);else if(test_item.ti)i.tn0=w)pthread_create(&hti,NULL,w,&(test_item.ti)i);for(i=0;iMAX_THREAD;i+)pthread_join(hti,NULL);pthread_mutex_destroy(&cs_d);pthread_mutex_destroy(&cs_rc);pthread_mutex_destroy(&cs

20、_sr);pthread_mutex_destroy(&cs_so);int main(int argc,char *argv)int i=0;int si,pos;int fd;FILE *fa;char file_name100;create_exam();sprintf(file_name,%s_answer.txt,test_item.sn);if(fa=fopen(file_name,w)=NULL)printf(Error openning answer file:%sn,file_name);exit(3);save_answer(fa);exit(0);1. 写优先算法#inc

21、lude #include #include #include #include #include #include #define MAX_THREAD 10#define SNL 8typedef structchar tn3; /name of threadunsigned int rm; /the moment when this thread request to access data.unsigned int pt; /duration of operationunsigned int i; /same to rmunsigned int b; /instance at whic

22、h this thread begin to operate dataunsigned int e; /ending instanceTEST_INFO;/TEST_INFO test_dataMAX_THREAD;typedef struct char sn100; /student numberTEST_INFO tiMAX_THREAD; /test itemTI; /test_item_for_student/TI test_itemsSTUDENTS;TI test_item= 2566,w1, 4,7,r1,11,14,r2,1,5,w2,8,11,w3,15,2,r3,5,8,r

23、4,12,15,w4,5,2,r5,9,12,r6,15,3;char r_seqMAX_THREAD3;char o_seqMAX_THREAD3;int sr=0;int so=0;int rc=0; /count how many readers are readingpthread_mutex_t cs_d; /guarentee mutually access datapthread_mutex_t cs_rc; /guarentee mutually access rcpthread_mutex_t cs_sr; /guarentee mutually access srpthre

24、ad_mutex_t cs_so; /guarentee mutually access srtime_t base; /the moment when function main begin/*void print_answer()int i;printf(%sn,test_item.sn);printf(name r_m p_t i_t b_t e_tn);for(i=0;iMAX_THREAD;i+)printf(%4s%4d%4d%8d%8d%8dn,(test_item.ti)i.tn,(test_item.ti)i.rm,(test_item).tii.pt,(test_item.

25、ti)i.i,(test_item.ti)i.b,(test_item.ti)i.e);printf(r_seq:);for(i=0;iMAX_THREAD;i+)printf(%4s,r_seqi);printf(n);printf(o_seq:);for(i=0;iMAX_THREAD;i+)printf(%4s,o_seqi);printf(n);*/void save_answer(FILE *f) /save the result int i;fprintf(f,t%s_answer.txtntr/w problem:read firstnn,test_item.sn);fprint

26、f(f,name r_m p_t i_t b_t e_tn);for(i=0;iMAX_THREAD;i+)fprintf(f,%4s%4d%4d%8d%8d%8dn,(test_item.ti)i.tn,(test_item.ti)i.rm,(test_item).tii.pt,(test_item.ti)i.i,(test_item.ti)i.b,(test_item.ti)i.e);fprintf(f,n);fprintf(f,r_seq:);for(i=0;iMAX_THREAD;i+)fprintf(f,%4s,r_seqi);fprintf(f,n);fprintf(f,o_seq

27、:);for(i=0;irm);/休眠读线程进入的时间长 gettimeofday(&t,NULL);/获得当前的时间 (TEST_INFO *)td)-i=difftime(t.tv_sec,rl);/将系统时间与main主函数执行的时间差赋值给i变量(读线程进入的时间) pthread_mutex_lock(&cs_sr);/建立互斥锁 strcpy(r_seqsr+,(TEST_INFO *)td)-tn); pthread_mutex_unlock(&cs_sr);/解除互斥锁 pthread_mutex_lock(&cs_rc); rc+; if(rc=1)pthread_mutex

28、_lock(&cs_d); pthread_mutex_unlock(&cs_rc); gettimeofday(&t,NULL);/获得当前的时间 (TEST_INFO *)td)-b=difftime(t.tv_sec,rl);/将系统时间与main主函数执行的时间差赋值给b变量(读线程开始的时间) pthread_mutex_lock(&cs_so); strcpy(o_seqso+,(TEST_INFO *)td)-tn);/将读线程名复制给0_seq队列 pthread_mutex_unlock(&cs_so); sleep(TEST_INFO *)td)-pt);/休眠写进程 持续

29、的时间长 gettimeofday(&t,NULL);/获得当前的时间 (TEST_INFO *)td)-e=difftime(t.tv_sec,rl);/ pthread_mutex_lock(&cs_rc); rc-; if(rc=0)pthread_mutex_unlock(&cs_d); pthread_mutex_unlock(&cs_rc); return 0;void *r(void *td) struct timeval t; time_t wl=base; sleep(TEST_INFO *)td)-rm);/休眠写进程进入的时间长 gettimeofday(&t,NULL)

30、; (TEST_INFO *)td)-i=difftime(t.tv_sec,wl);/将系统时间与main主函数执行的时间差赋值给i变量(写线程进入的时间) pthread_mutex_lock(&cs_sr);/建立互斥锁 strcpy(r_seqsr+,(TEST_INFO *)td)-tn);/ 将写线程名复制给r_seq队列 pthread_mutex_unlock(&cs_sr);/解除互斥锁 pthread_mutex_lock(&cs_d); gettimeofday(&t,NULL);/获得当前的时间 (TEST_INFO *)td)-b=difftime(t.tv_sec,

31、wl);/将系统时间与main主函数执行的时间差赋值给b变量(写线程开始的时间) pthread_mutex_lock(&cs_so); strcpy(o_seqso+,(TEST_INFO *)td)-tn);/ 将写线程名复制给o_seq队列 pthread_mutex_unlock(&cs_so); sleep(TEST_INFO *)td)-pt);/休眠写进程持续的时间长 gettimeofday(&t,NULL);/获取当前的时间 (TEST_INFO *)td)-e=difftime(t.tv_sec,wl);/将系统时间与main主函数执行的时间差赋值给e变量(写线程结束的时间

32、) pthread_mutex_unlock(&cs_d); return 0;void create_exam() int i=0;pthread_t htMAX_THREAD;pthread_mutex_init(&cs_d,NULL);/初始化互斥锁 pthread_mutex_init(&cs_rc,NULL);pthread_mutex_init(&cs_sr,NULL);pthread_mutex_init(&cs_so,NULL);struct timeval t;gettimeofday(&t,NULL);base=t.tv_sec;for(i=0;iMAX_THREAD;i+

33、)/分别创立读写线程的初始化 if(test_item.ti)i.tn0=r)pthread_create(&hti,NULL,r,&(test_item.ti)i);else if(test_item.ti)i.tn0=w)pthread_create(&hti,NULL,w,&(test_item.ti)i);for(i=0;iMAX_THREAD;i+)pthread_join(hti,NULL);pthread_mutex_destroy(&cs_d);/销毁互斥锁 pthread_mutex_destroy(&cs_rc);pthread_mutex_destroy(&cs_sr);

34、pthread_mutex_destroy(&cs_so);int main(int argc,char *argv)int i=0;int si,pos;int fd;FILE *fa;char file_name100;create_exam();sprintf(file_name,%s_answer.txt,test_item.sn);/从文件中读取 if(fa=fopen(file_name,w)=NULL)printf(Error openning answer file:%sn,file_name);exit(3);save_answer(fa);exit(0);2. 无优先算法#

35、include #include #include #include #include #include #include #define MAX_THREAD 10#define SNL 8typedef structchar tn3; /name of threadunsigned int rm; /the moment when this thread request to access data.unsigned int pt; /duration of operationunsigned int i; /same to rmunsigned int b; /instance at w

36、hich this thread begin to operate dataunsigned int e; /ending instanceTEST_INFO;/TEST_INFO test_dataMAX_THREAD;typedef struct char sn100; /student numberTEST_INFO tiMAX_THREAD; /test itemTI; /test_item_for_student/TI test_itemsSTUDENTS;TI test_item= 2566,w1, 4,7,r1,11,14,r2,1,5,w2,8,11,w3,15,2,r3,5,

37、8,r4,12,15,w4,5,2,r5,9,12,r6,15,3;char r_seqMAX_THREAD3;char o_seqMAX_THREAD3;int sr=0;int so=0;int rc=0; /count how many readers are readingpthread_mutex_t cs_d; /guarentee mutually access datapthread_mutex_t cs_rc; /guarentee mutually access rcpthread_mutex_t cs_sr; /guarentee mutually access srpthread_mutex_t cs_so; /guarentee mutually access srtime_t base; /the moment when function main begin/*void print_answer()int i;printf(%sn,test_item.sn);printf(name r_m p_t i_t b_t e_tn);for(i=0;iMAX_THREAD;i+)printf(%4s%4d%4d%8d%8d%8dn,(test_item.ti)i.tn,(test_item.ti)i.rm,(test_item).tii.pt,(test

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服