版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章开发多进程/线程程序8.1
多进程开发8.2
多线程开发8.1
多进程开发8.1.1
什么是进程8.1.2
进程环境和属性8.1.3
创建进程8.1.4
等待进程结束8.1.5
退出进程8.1.6
常用进程间通信的方法8.1.7
进程编程实例8.1.1
什么是进程进程就是一个正在运行的程序。当运行可
执行文件以后,操作系统会执行文件中的
代码,在CPU上运行的这组代码被称做进
程。一个进程不仅包含了正在运行的代码,也包括了运行代码所需要的资源(包括用
户用到的资源和操作系统需要用的资源)。8.1.2
进程环境和属性大多数UNIX系统的main()函数定义如下:int
main(int
argc,
char
*argv[],
char
*envp[]);POSIX标准规定使用一个全局的环境变量
environ取代了参数envp,应用程序可以通过getenv()和putenv()函数读取或设定一个环境变量。
getenv()函数定义如下:#include<stdlib.h>char
*getenv(const
char
*name);8.1.3
创建进程Linux系统通过fork()系统调用创建一个进程,fork()函数定义如下:#include<sys/types.h>#include<unistd.h>pid_tfork(void);8.1.4
等待进程结束Linux系统提供给了一个waitpid()函数,它的作用是等待另外一个进程结束,函数定义如下:#include<sys/types.h>#include<sys/wait.h>pid_t
waitpid(pid_t
pid,
int
*status,
intoptions);8.1.5
退出进程exit()函数的作用是退出当前进程,并且尽可能释放当前进程占用的资源。_exit()函数作用也是退出当前进程,但是并不试图释放进程占用的资源。atexit()函数和on_exit()函数的作用都是为程序退出时指定调用用户的代码#include
<stdlib.h>int
atexit(void
(*function)(void));int
on_exit(void
(*function)(int
,
void
*),
void
*arg);void
exit(int
status);#include
<unistd.h>void
_exit(int
status);8.1.6
常用进程间通信的方法Linux提供了多种进程间通信的方法,常见的包括管道、FIFO、消息队列、信号量、共享内存以及通过socket也可以实现不同进程间的通信。本节将简述管道和共享内存这两种进程间的通信方法。1.管道2.共享内存1.管道所有的UNIX系统都支持管道。管道就好像日常的水管一样,在两个进程之间,用来传送数据。进程间的管道有两个限制:一个是管道是半双工的;另一个是管道只能在有共同父进程的进程间使用。2.共享内存共享内存是在内存中开辟一段空间,供不同的进程访问。与管道相比,共享内存不仅能在多个不同进程(非父子进程)间共享数据,而且可以比管道传送更大量的数据。8.1.7
进程编程实例在本节的最后,给出一个多进程编程的综合实例,程序会创建两个进程,在父进程和子进程之间通过管道传递数据,父进程向子进程发送字符串exit表示让子进程退
出,并且等待子进程返回;子进程查询管道,当从管道读出字符串exit的时候结束。8.2
多线程开发8.2.1
线程的概念8.2.2
进程和线程对比8.2.3
创建线程8.2.4
取消线程8.2.5
等待线程8.2.6
使用pthread库线程操作实例8.2.1
线程的概念线程是一种轻量级的进程。线程没有系统资源。线程是操作系统调度的最小单位。在操作系统内核中,是按照线程作为调度单位来调度资源的。在一个进程内部,多个线程之间的资源是共享的。8.2.2
进程和线程对比进程和线程有许多相似之处,但是也有许多不同:资源分配不同工作效率不同执行方式不同8.2.3
创建线程Linux系统开发多线程程序大多使用pthread库。pthread库对线程操作的函数基本都以
pthread开头,创建线程的函数定义如下:#include
<pthread.h>int
pthread_create(pthread_t
*restrict
thread,const
pthread_attr_t
*restrict
attr,void
*(*start_routine)(void*),
void
*restrictarg);8.2.4
取消线程线程的退出有几种条件,当线程本身的代码运行结束后,会自动退出;或者线程代码中调用return也会导致线程退出;还有一种情况是通过其他的线程把一个线程退出,pthread库提供了pthread_cancel()函数用来取消一个线程的执行。#include<pthread.h>int
pthread_cancel(pthread_t
thread);8.2.5
等待线程在线程操作实例中,主线程使用sleep()函数暂停自己的运行,等待新创建的线程结束。pthread库提供了一种等待其他线程结束的方法,使用pthread_join()函数等待一个线程结束,函数定义如下:#include<pthread.h>int
pthread_join(pthread_t
thread,
void**value_ptr);8.2.6
使用pthread库线程操作实例本节最后给出一个多线程操作实例,在主程序中创建两个线程mid_t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢管扣件2024年度租赁协议
- 甲方出售乙方2024年度插秧机合同
- 学校合作申请专利协议范本
- 柴油买卖合同
- 二零二四年卫星发射服务合同2篇
- 2024年度股权转让合同协议范本3篇
- 青年员工职业发展文档
- 2024年度旅游业务与合作运营合同3篇
- 《笔记本培训》课件
- 《石油公司简介》课件
- 分子遗传学-表观遗传学课件
- 译林版小学英语二年级上册课件:Unit 5 Have some juice,please
- 国家基本医疗保险、工伤保险和生育保险药品目录
- 医院大型医用设备配置方案表
- 第16讲磁聚焦和磁发散(解析版)
- 2023年华三杯考试复习题库及答案
- 华能电力定员标准
- 小学数学教师资格证面试真题及答案【版】
- 俄语口语入门知到章节答案智慧树2023年山东交通学院
- 省级临床重点专科心血管内科评分标准(试行)
- 大学体育与体质健康(山东联盟)智慧树知到答案章节测试2023年中国石油大学(华东)
评论
0/150
提交评论