嵌入式linux系统开发详解第8进程_第1页
嵌入式linux系统开发详解第8进程_第2页
嵌入式linux系统开发详解第8进程_第3页
嵌入式linux系统开发详解第8进程_第4页
嵌入式linux系统开发详解第8进程_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论