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

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验4 多线程通讯实验报告

实验四 多线程通讯实验报告 【姓名】… 【学号】… 【实验题目】多线程通讯 【实验目的】 加深对线程和多线程要领的理解; 掌握多线程程序设计的基本方法; 学习同一进程内线程间交换数据的方法。 【实验内容】 设计一个单进程内多线程并发运行的程序, 不同的线程完成下列不同的工作: (1)接收键盘输入线程 负责接收用户的键盘输入,并以适当的方式将由键盘获得的数据交给其它线程处理。 (2)显示线程 负责全部数据显示任务,包括键盘输入数据的显示和提示信息的显示。 (3)分发数据线程 将键盘输入的数据分为3类,即字母、数字和其它,并分别将字母写入文件letter.txt中,数字写入文件number.txt中,除字母和数字外其它数据丢弃。 【实验要求】 程序能以适当的方式提示用户输入数据; 提示用户有数据被丢弃; 全部的显示任务必须由显示进程完成; 整个程序能够连续处理多组输入数据,直到用户输入“quit”字符串,整个程序结束; 进一步要求:比较线程间通信方式与进程间通信方式特点。 【实验方法】 利用pthread_create()函数创建2个子线程,用一个父线程和两个子线程完成上面的三个实验任务,用子线程1负责键盘输入任务,子线程2实现数据分发任务,父线程实现全部的显示任务。 使用条件变量实现线程之间的同步。条件变量允许线程挂起,知道共享数据上的某种条件满足。在本程序中使用的条件变量上的基本操作有:触发条件;等待条件,挂起线程直到其他线程触发。 利用线程的互斥量的加锁与解锁,并和条件变量一起使用实现多线程之间的互斥。 利用while()循环、条件变量(实现同步)和互斥变量(实现互斥)实现连续多组数据输入。 【程序结构】 ·数据结构:字符数组等; ·程序结构:顺序结构、if-else分支结构、for循环和while循环结构; ·主要算法:无特别算法 【实验结果】 1、有代表性的执行结果: [stud13@localhost stud13]$ cc –lpthread itc.c [stud13@localhost stud13]$ ./a.out Please input a line: ∟operatingsystem01234-=,. Your message is: operatingsystem01234-=,. The characters deserted are: -=,. Please input a line: ∟xushengju6651001!@#$%^*() Your message is: xushengju6651001!@#$%^*() The characters deserted are: !@#$%^*() Please input a line: ∟Hello123 Your message is: Hello123 Please input a line: ∟quit [stud13@localhost stud13]$ cat letter.txt operatingsystemxushengjuHello[stud13@localhost stud13]$ cat number.txt 012346651001123[stud13@localhost stud13]$ 2、结果分析及解释: 先创建子线程1,输出提示信息“Please input a line:”,之后循环等待子线程3的信息,当子线程3等待到子线程2的输入数据后进行分发,再唤醒子线程1,显示输出从终端获得的数据,并显示丢弃的字符。如此循环下去,直到输入“quit”线程退出。 【问题分析】 实验中出现的问题及解决办法: 1、线程通讯与进程通讯的区别于联系: 在多线程环境中,进程作为资源的独立单位,线程是进程的一个实体,是被进程调度的基本单位。需要同步和互斥手段的辅助以保证数据的一致性。””),是为了将每次从键盘输入的字符串都能存到一个空的字符数组中,以防止字符的重复和覆盖,也可以用memset(*string,’\0’,0)函数。 3、在本程序中,需要合理安排3个子线程的任务与条件变量、互斥锁的制约关系,3个子线程要实现很好的同步与互斥,而且在分发线程(子线程3)中,同时需要与子线程1、2互斥。由此可见使用条件变量在实现多组数据的输入、显示和分发方面能实现很好的同步和互斥。 4、线程间通信相关语句 1)线程管理 pthread_create 创建一个线程。 pthread_exit 可以使调用线程终止,而不是整个进程退出。 2)互斥 pthread_mutex_init 初始化一个互斥对象 p

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档