




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux多线程编程 IEEEPOSIX标准p1003 1c Pthreads 定义了处理线程的一系列C语言类型的API 在Linux中 线程一般被认为是 轻量级的进程 Linux创建进程所使用的函数是fork 或者vfork 而对线程的创建和管理Linux可以使用POSIX的线程库pthreads提供的APIs 使用fork 创建进程和使用POSIX线程库差别 使用fork 创建进程的特点 代价昂贵 通常子进程需要拷贝父进程的整个上下文 比如数据等 进程间的通信方式比较复杂 比如使用管道 消息 共享内存等方法 操作系统在实现进程间的切换比线程切换更费时 使用POSIXpthreads库创建线程的特点 线程可使用存在于进程中的资源 线程间的通信方式更容易 比如通过进程中的变量 可以让多个线程共享数据 操作系统对线程的切换比对进程的切换更容易和快速 Linux多线程编程 线程的创建pthreads线程库中提供的创建线程的函数是pthread create includeintpthread create pthread t thread pthread attr t attr void start routine void void arg 线程的退出在线程的处理函数中 可以显示的调用pthread exit 结束线程执行 也可以不调用pthread exit 而只是让线程处理程序返回 voidpthread exit void retval 除了pthread exit 函数 可以让当前调用pthread exit 的线程显示地退出外 线程也可以使用pthread cancel 函数终止其他线程的执行 intpthread cancel pthread tthread 等待线程结束pthread join 函数会挂起创建线程的线程的执行 直到等待到想要等待的子线程 intpthread join pthread tth void thread return 线程的分离主线程创建子线程 且子线程本身自己有自我回收内存资源的能力 intpthread detach pthread tth 获得当前线程标志使用pthread self 函数可以获得当前线程的标志 pthread self 的返回值就是当前线程的标志 pthread tpthread self void 线程互斥和同步 Mutex 原子性 对mutex的加锁和解锁操作是原子的 一个线程进行mutex操作的过程中 其他线程不能对同一个mutex进行其他操作 单一性 拥有mutex的线程除非释放mutex 否则其他线程不能拥有此mutex 非忙等待 等待mutex的线程处于等待状态 直到要等待的mutex处于未加锁状态 这时操作系统负责唤醒等待此mutex的线程 在POSIX线程库当中 存在三种类型的mutex快速 fast mutex一个线程锁定了mutex 其他线程想要获得此mutex时 必须等待mutex处于未锁定状态递归 recursive mutex已经拥有此mutex的线程可执行多次加锁操作 且不必等待mutex处于未加锁状态 但是对于其他线程 要想获得此mutex 必须等待此mutex处于未锁定状态错误检测 errorchecking mutex当一个错误检测mutex已经被一个线程锁定时 其他线程想要锁定这个mutex 则锁定函数pthread mutex lock 函数将返回edeadlk值 POSIX线程库对mutex提供了以下函数进行操作 intpthread mutex init pthread mutex t mutex constpthread mutexattr t mutexattr intpthread mutex lock pthread mutex t mutex intpthread mutex trylock pthread mutex t mutex intpthread mutex unlock pthread mutex t mutex intpthread mutex destroy pthread mutex t mutex 初始化mutexpthread mutex tfastmutex PTHREAD MUTEX INITIALIZER pthread mutex trecmutex PTHREAD RECURSIVE MUTEX INITIALIZER NPpthread mutex terrchkmutex PTHREAD ERRORCHECK MUTEX INITIALIZER NP 线程使用mutex的简单代码如下 pthread mutex tmylock mylock PTHREAD MUTEX INITIALIZER pthread mutex lock 条件变量 条件变量是线程的同步设备 在线程间使用条件变量可以使一个线程在执行过程中 因满足某个条件而发出信号通知另一个线程 而另一个线程可以处于挂起状态 等待某个条件满足后 才继续执行 相关操作如下 条件变量必须和mutex一起使用来避免竞争情况 pthread cond tcond PTHREAD COND INITIALIZER intpthread cond init pthread cond t cond pthread condattr t cond attr intpthread cond signal pthread cond t cond intpthread cond broadcast pthread cond t cond intpthread cond wait pthread cond t cond pthread mutex t mutex intpthread cond timedwait pthread cond t cond pthread mutex t mutex conststructtimespec abstime intpthread cond destroy pthread cond t cond 线程的撤销 一个线程可以通过向另一个线程发送请求来结束另一个线程的执行 当一个线程响应了撤销请求 就相当于执行了pthread exit pthread canceled 操作 许多POSIX线程库函数都是撤销点 POSIXpthreads库中关于撤销操作的函数有 intpthread setcancelstate intstate int oldstate PTHREAD CANCEL ENABLE接受线程撤销请求PTHREAD CANCEL DISABLE不接受线程撤销请求intpthread setcanceltype inttype int oldtype 改变响应撤销请求的类型voidpthread testcancel void 测试未决的撤销并且执行它 目的是在代码中显式地检测撤销请求 清理实例程序 在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年通信行业5G技术应用影响分析报告
- 2025煤厂会计面试题目及答案
- 2025会计主管面试题目及答案
- 2025年电子竞技行业电子竞技商业模式创新案例研究报告
- 2025年智慧物流产业行业物流大数据应用研究报告
- 2025年电子商务行业跨境电商市场前景预测报告
- 2025东莞财务会计面试题目及答案
- 2025年资产管理行业资产配置策略研究报告
- 2025保险金融资格考试题库及答案
- 滋肾育胎丸临床应用考核试题
- 2025河北水发节水有限公司公开招聘工作人员16人笔试参考题库附答案解析
- 新版中华民族共同体概论课件第十二讲民族危亡与中华民族意识觉醒(1840-1919)-2025年版
- 2025-2026学年人教版(2024)九年级物理全册第十四章 内能的利用(单元同步检测练习)(含答案)
- 第1课时 10的加、减法(教学设计)-2024-2025学年一年级上册数学人教版
- 2025至2030中国聚烯烃行业项目调研及市场前景预测评估报告
- 2025四川达州宣汉县国有资产管理服务中心县属国有企业招聘劳动合同职工26人笔试历年参考题库附带答案详解
- 新教科版小学1-6年级科学需做实验目录
- 《电子商务法律法规》课程标准
- 医院关于印发《即时检验临床应用管理办法》的通知
- 三年级下册书法练习指导全册教案(湖南美术出版社)
- GB/T 17880.5-1999平头六角铆螺母
评论
0/150
提交评论