- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)