网站大量收购闲置独家精品文档,联系QQ:2885784924

8.第八讲Linux进程通信及多线程.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * 北京理工大学珠海学院 计算机教研室 * * 函数格式 所需头文件 #include sys/types.h #include sys/ipc.h #include sys/shm.h 函数原型 Int shmdt(const void *shmaddr) 函数传入值 Shmaddr:被映射的共享内存段地址 返回值 成功:0 出错:-1 Shmdt 函数语法要点 北京理工大学珠海学院 计算机教研室 * * 7.4.5 消息队列 概述 消息队列就是一个消息的列表 用户可以从消息队列中添加消息、读取消息。具有一定的FIFO特性,但可以实现消息的随机查询 这些消息存在于内核中,由“队列ID”来标识 消息队列的实现 消息队列的实现包括创建和打开消息队列、添加消息、读取消息和控制消息队列 创建或打开消息队列:msgget。这里创建的消息队列的数量会受到消息队列数量的限制 添加消息:msgsnd函数,它把消息添加到已打开的消息队列末尾 读取消息:msgrcv,它把消息从消息队列中取走,与FIFO不同的是,这里可以指定取走某一条消息 控制消息队列:msgctl 北京理工大学珠海学院 计算机教研室 * * 7.5 多线程编程 7.5.1 Linux下线程概述 线程概述 进程是系统中程序执行和资源分配的单位。每个进程都拥有自己的数据段、代码段和堆栈段,故进程在进行切换等操作时需要进行大量上下文的切换工作 为进一步减少处理器的空转时间支持多处理器和减少上下文切换开销,进程演化出另一个概念——线程 进程内的基本调度单位,也可称为轻量级进程 线程是在共享内存空间中并发的多道执行路径,共享一个进程的资源,如文件描述和信号处理 大大减少上下文切换的开销 一个进程可以有多个线程,既有多个线程控制表及堆栈寄存器,但却共享一个用户地址空间 任何线程对系统资源的操作都会给其他线程带来影响 北京理工大学珠海学院 计算机教研室 * * 多线程系统中,进程和线程的关系 线程分类 线程按照其调度者可以分为用户级线程和核心级线程两种 用户级线程:主要解决的是上下文切换问题,其调度算法和调度过程全部由用户自行选择决定,运行时不需要特定的内核支持 核心级进程:允许不同进程中的线程按照同一相对优先调度方法进行调度 大多数系统采用用户级线程与核心级线程并存的方法。一个用户级线程可以对应一个或几个核心级线程 用户地址空间 线程一 线程二 线程三 北京理工大学珠海学院 计算机教研室 * * Linux线程技术的发展 POSIX Thread Library)线程库。其目标如下: Linux2.2内核中,并不存在真正意义上的线程。其常用的线程pthread实际上是通过进程来模拟的,即Linux中的线程也是通过fork创建的“轻”进程,且线程的数量有限 Linux2.4内核消除了这个线程个数的限制,并且允许在系统运行中动态地调整进程数上限。当时采用的是LinuxThread线程库,其对应的线程模型是“一对一”线程模型。即一个用户级线程对应一个内核线程,其线程之间的管理在内核外函数库中实现。但其并不完全与POSIX兼容,且其进程ID、信号处理、线程总数、同步等各方面还有诸多的问题 Linux2.6内核中,进程调度通过重新编写、内核线程框架也被重新编写,开始使用NPTL(Native POSIX Thread Library) POSIX兼容性、多处理器结构的应用、低启动开销、低链接开销、与LinuxThreads应用的二进制兼容性、软硬件的可扩展 北京理工大学珠海学院 计算机教研室 * * 7.5.2 Linux线程实现 线程基本操作 线程的创建和退出 函数说明:创建线程实际上就是确定调用该线程函数的入口点,通常使用pthread_create 线程创建之后,开始运行相关的线程函数,该函数运行完之后,线程也就退出。另一种退出线程的方法是使用函数pthread_exit,这是线程的主动行为 在使用线程函数时,不能随意使用exit退出函数进行出错处理。由于exit的作用是使调用进程终止,往往一个进程包含多个线程,故在使用exit之后,该进程中的所有线程都终止 由于一个进程中的多个线程是共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随着线程的终止而得到释放。 在线程中使用pthread_join函数,用于将当前线程挂起,等待线程的结束。此函数是一个线程阻塞函数,调用它的函数将一直等待到被等待的线程结束为止。函数返回,被等待线程的资源就收回 此处的线程相关操作都是用户空间线程的操作。Linux中,一般Pthread线程库是一套通用的线程库 北京理工大学珠海学院 计算机教研室 * * 函数格式

文档评论(0)

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

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

1亿VIP精品文档

相关文档