版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告实验二:线程和管道通信实验一、 实验目的 通过 Linux 系统中线程和管道通信机制的实验,加深对于线程控制和管道通信概念的理解,观察和体验并发进(线)程间的通信和协作的效果 ,练习利用无名管道进行进(线)程间通信的编程和调试技术。二、实验说明1) 与线程创建、执行有关的系统调用说明 线程是在共享内存中并发执行的多道执行路径,它们共享一个进程的资源,如进程程序段、文件描述符和信号等,但有各自的执行路径和堆栈。线程的创建无需像进程那样重新申请系统资源,线程在上下文切换时也无需像进程那样更换内存映像。多线程的并发执行即避免了多进程并发的上下文切换的开销又可以提高并发处理的效率。 p
2、thread 库中最基本的调用。 1.pthread_create 系统调用语法: #include <pthread.h> Int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *) Void *arg); pthread_create 函数创建一个新的线程。pthread_create 在 thread 中保存新线程的标识符。Attr 决定了线程应用那种线程属性。使用默认可给定参数 NULL; (*start_routine) 是一个指向新线程中要执行的函数的指
3、针 arg 是新线程函数携带的参数。 Pthread_create 执行成功会返回0并在 thread 中保存线程标识符。执行失败则返回一个非0的出错代码2.pthread_exit 系统调用语法: #include <pthread.h> void pthread_exit(void *retval); pthread_exit 函数使用函数 pthread_cleanup_push 调用任何用于该线程的清除处理 函数,然后中止当前进程的执行,返回 retval。 Retval 可以由父线程或其他线程通过 pthread_join 来检索。一个线程也可以简单地通过从其初始化函数返
4、回来终止。 3.pthread_join 系统调用语法: #include <pthread.h> int pthread_join(pthread_t th, void *thread_return); int pthread_detach(pthread_t th); 函数 pthread_join 用于挂起当前线程,直到 th 指定的线程终止运行为止。2) 管道通信机制 管道 pipe 是进程间通信最基本的一种机制。在内存中建立的管道称为无名管道, 在磁盘上建立的管道称为有名管道。无名管道随着进程的撤消而消失,有名管道则可以长久保存,shell 命令符| 建立的就是无名管道,
5、而 shell 命令 mkfifo 建立的是有名管道。两个进程可以通过管道一个在管道一端向管道发送其输出,给另一进程可以在管道的另一端从管道得到其输入.管道以半双工方式工作,即它的数据流是单方向的. 因此使用一个管道一般的规则是读管道数据的进程关闭管道写入端,而写管道进程关闭其读出端。管道既可以采用同步方式工作也可以采用异步方式工作。三、实验内容题目:设有二元函数 f(x,y) = f(x) + f(y) 其中: f(x) = f(x-1) * x (x >1) f(x)=1 (x=1) f(y) = f(y-1) + f(y-2) (y> 2) f(y)=1 (y=1,2) 请编
6、程建立 3 个并发协作进程,它们分别完成 f(x,y)、f(x)、f(y)(1)首先要创建三个线程,分别执行f(x)、f(y)和f(x,y)函数,通过pthread_create系统调用即可以创建相应的线程,若创建成功则返回0并保存线程标识符。(2)线程之间的通信是通过管道实现,在内存中建立的管道称为无名管道,在磁盘上建立的管道称为有名管道。无名管道随着线程的撤销而消失。通过pipe系统调用即可创建相应的管道。(3)管道通信的数据流是单方向的,管道的一端只能作为输入端或输出端,通过系统调用read(int pipe_id,const void *buf,size_t count)、write(
7、int pipe_id,const void *buf,size_t count)即可实现管道的读出与写入。(4)创建相应的线程和管道后,则要考虑相应线程的执行,这是要一个系统调用,pthread_join(pthread_t th, void *thread_return)系统调用是将当前的线程挂起,直到线程th执行结束。(5)线程运行结束,可以通过系统调用结束,pthread_exit(void *retval)系统调用可以结束当前的线程。四、实验结果五、实验中遇到的错误:编写完程序运行时,程序没有按照规定在限制的条件内结束,而是无限循环进行,由此可以判断出应该是有关循环的代码段出现错误,
8、返回代码段,找到有循环的代码,仔细阅读将错误找到并改正,再次运行时,实验结果正确。附:实验代码新建exp2.c文件并进入编辑#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(int argc,char *argv) int pid1,pid2;/进程号 int pipe12;/存放第一个无名管道标号 int pipe22;/存放第二个无名管道标号 int x=1,y=1; /使用pipe()系统调用建立两个无名管道。建立不成功程序退出,执行终止 if(pipe(pipe1)<
9、;0) perror("pipe not create"); exit (EXIT_FAILURE); if(pipe(pipe2)<0) perror("pipe not create"); exit(EXIT_FAILURE); /使用fork()系统调用建立子进程,建立不成功程序退出,执行终止 if(pid1=fork()<0) perror("process not create"); exit(EXIT_FAILURE); else if(pid1=0) /子进程1从管道1的1端写, close(pipe10);
10、 close(pipe20); close(pipe21); int fx=1; do if(x=1) fx=1; else fx=fx*x; printf("child %d f(x): f(%d)=%dn",getpid(),x+,fx); write(pipe11,&fx,sizeof(int); while(x<=9); /写完成之后,关闭管道 close(pipe11); /子进程执行结束 exit(EXIT_SUCCESS); else if(pid2=fork()<0) perror("process not create&quo
11、t;); exit(EXIT_FAILURE); else if(pid2=0) /子进程2从管道2的1端写 close(pipe10); close(pipe20); close(pipe11); int fy=1,fy1=1,fy2=1; do if(y=1|y=2) fy=1; else fy1=fy2;fy2=fy;fy=fy1+fy2; printf("child %d f(y): f(%d)=%dn",getpid(),y+,fy); write(pipe21,&fy,sizeof(int); while(y<=9); close(pipe21); exit(EXIT_SUCCESS); else /父进程从管道1的0端和管道2的0端读 close(pipe11); close(pipe21); int m=1,n=1; do read(pipe10,&x,sizeof(int); read(pipe20,&y,sizeof(int); printf("parent %d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中海地产员工奖惩制度
- 食品公司奖惩制度范本
- 保洁人员考核奖惩制度
- 项目部质量安全奖惩制度
- 餐饮企业销售奖惩制度
- 店铺音乐规范奖惩制度
- 小学生一卡双星奖惩制度
- 装修公司工人奖惩制度
- 质检内部考核奖惩制度
- 政府车队请销假奖惩制度
- 第21课+世界殖民体系的瓦解与新兴国家的发展+教学设计-2024-2025学年高一下学期统编版(2019)必修中外历史纲要下
- 西宁市城北区2025年招考编制外工作人员高频重点模拟试卷提升(共500题附带答案详解)
- 学校电梯增设施工方案
- 《口腔设备学》课件-第一章 口腔设备认知与发展
- 露地大樱桃主要病虫害绿色防控技术规程
- 《商务谈判与推销实务(第三版)》课件全套 王军华 项目1-12 商务谈判工作认知 -沟通、洽谈语言技巧
- 某EPC项目技术标投标文件
- 煤矿防灭火细则培训
- 科学技术史课件1
- (中职)中职生创新创业能力提升教课件完整版
- 中班健康课件《我不挑食》
评论
0/150
提交评论