实验4多线程通讯实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四多线程通讯实验报告 【姓名】… 【学号】… 【实验题目】多线程通讯 【实验目的】 加深对线程和多线程要领的理解; 掌握多线程程序设计的基本方法; 学习同一进程内线程间交换数据的方法。 【实验内容】 设计一个单进程内多线程并发运行的程序,不同的线程完成下列不同的工作: 接收键盘输入线程 负责接收用八的键盘输入,并以适当的方式将由键盘获得的数据交给其它线程处理。 显示线程 负责全部数据显示任务,包括键盘输入数据的显示和提示信息的显示。 分发数据线程 将键盘输入的数据分为3类,即字母、数字和其它,并分别将字母写入文件letter.txt 中,数字写入文件number.txt中,除字母和数字外其它数据丢弃。 【实验要求】 1、 程序能以适当的方式提示用户输入数据; 2、 提示用户有数据被丢弃; 3、 全部的显示任务必须Ft!显示进程完成; 4、 整个程序能够连续处理多组输入数据,直到用户输入“quit”字符串,整个程序结 朿; 5、 进一步要求:比较线程间通信方式与进程间通信方式特点。 【实验方法】 1、 利用pthread_create()函数创建2个子线程,用一个父线程和两个子线程完成上面 的三个实验任务,用子线程1负责键盘输入任务,子线程2实现数据分发任务, 父线程实现全部的显示任务。 2、 使用条件变量实现线程之间的同步。条件变量允许线程挂起,知道共享数据上的 某种条件满足。在本程序中使用的条件变量上的基本操作有:触发条件;等待条 件,挂起线程直到其他线程触发。 3、 利用线程的互斥量的加锁与解锁,并和条件变量一起使用实现多线程之间的互斥。 4、 利用while()循环、条件变量(实现同步)和互斥变量(实现互斥)实现连续多组 数据输入。 【程序结构】 ?数据结构:字符数组等; ?程序结构:顺序结构、if-else分支结构、for循环和while循环结构; ?主要算法:无特别算法 【实验结果】 1、有代表性的执行结果: [stud 13@localhost stud 13]$ cc -lpthread itc.c [studl3@localhost stud 13]$ ./a.out Please input a line: L operatingsystemO 1234-=,. Your message is: operatingsystemO 1234-=,. The characters deserted are: Please input a line: l_ xushengju6651001! @#$%A*() Your message is: xushengju6651001!@#$%A*() The characters deserted are: !@#$%A*() Please input a line: 1_H ellol23 Your message is: Hello 123 Please input a line: I—quit [studl3@localhost stud 13]$ cat letter.txt operatingsystemxushengjuHello[stud 13@localhost stud 13]$ cat number.txt 012346651001123[stud 13@1 ocalhost stud 13]$ 2、结果分析及解释: 先创建子线程1,输出提示信息“Please input a line: 后循环等待子线程3的信息, 当子线程3等待到子线程2的输入数据后进行分发,再唤醒子线程1,显示输出从终端获得 的数据,并显示丢弃的字符。如此循环下去,直到输入“quit”线程退出。 【问题分析】 实验中出现的问题及解决办法: 1、 线程通讯与进程通讯的区别于联系: 在多线程环境中,进程作为资源的独立单位,线程是进程的一个实体,是被进程调度 的基本单位。对不同的进程来说,他们具有独立的数据空间,要进行数据的传递只能通过系 统提供的通信机制进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程的 多个线程之间共亨数据空间,所以一个线程的数据可以直接为其他线程所用,这不仅快捷而 且方便。当然线程通讯也需要同步和互斥手段的辅助,以保证数据的一致性。 2、 有关字符数组初始化函数的使用: 在本实验中频繁使用了 strcpy(string, ^),是为了将每次从键盘输入的字符串都能 存到一个空的字符数组中,以防止字符的重复和覆盖,也可以用memset ^string, 9\0\0)函 数。 3、 在本程序中,需要合理安排3个子线程的任务与条件变量、互斥锁的制约关系,3 个子线程要实现很好的同步与互斥,而且在分发线程(子线程3)中,同时需要与子线程1、2 互斥。由此可

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档