




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux 多线程编程多线程编程 多线程与线程同步多线程与线程同步 多线程多线程 使用多线程好处 一 通过为每种事件类型的处理单独分配线程 可以简化处理异步事件异步事件的代码 线程处 理事件可以采用同步编程模式同步编程模式 启闭异步编程模式简单 二 方便的通信和数据交换 由于进程之间具有独立的数据空间 多进程必须使用操作系统提供的复杂机制才能实 现内存和文件描述符的共享 导致上下文切换的开销比较大 而线程之间共享进程的所有 资源 所以 多线程可以访问相同的存储空间和文件描述符 三 对一些不具有互斥型的问题 可以将其分解为从而改善程序的吞吐量 对于进程 在 完成多个任务时 实际上需要将任务串行化 对于多线程 相互独立而且想不不依赖的任 务可以交叉运行 只需要为每个任务分配一个线程即可 四 交互的程序可以通过使用多线程实现响应时间的改善 多线程可以把程序中用于处理 用户输入输出的部分与其他部分分开 线程包含了进程内执行环境必须的信息 包括进程 ID 一组寄存器值 栈 调度优先级和 策略 信号屏蔽字 errno 变量以及线程私有数据 线程 ID 使用 pthread t 数据类型来表示 类似于一种结构体 可以使用 pthread self 函数和 pthread equal 函数来通过线程 ID 识别线程 原型 include int pthread eaual pthread t tid1 pthread t tid2 判断两个线程 ID 是否相等 相等返回非 0 不相等返回 0 include pthread t pthread self void 获取自身线程 ID 返回调用线程的 ID 线程创建线程创建 include int pthread creat pthread t restrict tidp const pthread attr t attr void start rtn void void restrict arg 创建线程 成功返回 0 否则返回错误编号 tidp 指向的内存单元被设置为新创建的现成的线程 ID attr 用于定制线程的线程属性 设置为 NULL 时 则使用默认属性 新创建的函数从 strat rtn 函数的地址开始运行 该函数只有一个无类型指针参数 arg 若若 要想向要想向 strat rtn 传递不知一个参数 可以将多个参数放在一个结构体中 然传递不知一个参数 可以将多个参数放在一个结构体中 然 后把结构体的地址作为后把结构体的地址作为 arg 参数传入 参数传入 线程终止线程终止 如果进程中的任一线程调用了 exit Exit 或 exit 则整个进程会终止 同样 如果信 号的默认动作是终止进程 那么 把信号发送到进程会终止整个进程 单个进程的退出方式有三种 1 线程只是从启动的例程中退出 返回值是线程的终止码 2 线程可以被统一进程中的其他线程取消 3 线程调用 pthread exit include void pthread exit void rval ptr 线程通过调用 pthread exit 函数终止执行 就如同进程在结束时调用 exit 函数一样 这 个函数的作用是 终止调用它的线程并返回一个指向某个对象的指针 rval ptr 是一个无类型的指针 与传递给启动例程的单个参数类似 可以通过进程中的其 他线程调用 pthread join 函数访问这个指针 include int pthread join pthread t thread void rval ptr 成功返回 0 否则返回错误编号 pthread join 函数 以阻塞的方式等待 thread 指定的线程调用 pthread exit 冲启 动例程中返回或者被取消 当函数返回时 被等待线程的资源被收回 如果线程已经结束 那么该函数会立即返回 并且 thread 指定的线程必须是 joinable 的 thread 线程标识符 即线程 ID 标识唯一线程 rval ptr 用户定义的指针 用来存 储被等待线程的返回值 如果线程是从启动例程中返回 rval ptr 将包含返回码 如果线程被取消 由 rval ptr 指向的内存单元被置为 PTHREAD CANCELED 线程同步线程同步 线程同步机制包括互斥互斥 读写锁读写锁以及条件变量条件变量 互斥互斥 可以把互斥变量之置为常量 PTHREAD MUTEX INITIALIZER 针对静态分配的互斥量 或调用 pthread mutex init 函数进行初始化 如果动态的分配互斥量 如调用 malloc 函数 那么在释放内存前需要调用 pthread mutex destory include int pthread mutex init pthread mutex t restrict mutex const pthread mutexattr t restrict attr int pthread mutex destory pthread mutex t mutex int pthread mutex lock pthread mutex t mutex int pthread mutex trylock pthread mutex t mutex int pthread mutex unlock pthread mutex t mutex 成功返回 0 否则返回错误编号 如果线程不希望被堵塞 可以调用 pthread mutex trylock 尝试对互斥量进行加锁 如 果调用 pthread mutex trylock 时互斥量处于未锁住状态 则 pthread mutex trylock 将互斥量锁住 不会出现阻塞并返回 0 否则失败并返回 EBUSY 读写锁读写锁 初始化 include int pthread rwlock init pthread rwlock t restrict rwlock const pthread rwlockattr t restrict attr 初始化 int pthread rwlock destory pthread rwlock t restrict rwlock 销毁读写锁 成功返回 0 错误返回错误编号 锁定读写锁与解锁 include int pthread rwlock rdlock pthread rwlock t rwlock 在读模式下锁定读写锁 int pthread rwlock wrlock pthread rwlock t rwlock 在写模式下锁定读写锁 int pthread rwlock unlock pthread rwlock t rwlock 解锁 成功返回 0 错误返回错误编号 条件变量条件变量 和互斥量一样 可以把条件变量之置为常量 PTHREAD COND INITIALIZER 针对静态 分配的条件变量 或调用 pthread cond init 函数进行初始化 在释放内存前需要调用 pthread cond destory 函数对变量进行去除初始化 include int pthread cond init pthread cond t restrict cond const pthread condattr t restrict attr int pthread cond destory pthread cond t cond 成功返回 0 否则返回错误编号 条件变量是与条件测试一起使用的 通常线程会对一个条件进行测试 如果条件不满足调 用条件等待函数就等待条件满足 include int pthread cond wait pthread cond t restrict cond const pthread mutex t restrict mutex int pthread cond timedwait pthread cond t restrict cond const pthread mutex t restrict mutex const struct timespec rectrict timedout 成功返回 0 否则返回错误编号 cond 是一个指向条件变量的指针 mutex 是一个指向互斥量的指针 线程在调用前应该 拥有这个互斥量 传递给 pthread cond wait 的互斥量对条件进行保护 调用者吧锁住 的互斥量传递给函数 函数把调用线程防盗等待条件的线程列表上 然后互斥量解锁 pthread cond wait 返回时 互斥量再次被锁住 pthread cond timedwait 与 pthread cond wait 工作方式相似 只是多了一个 timeout timeout 是一个绝对值绝对值而不是相对值 其为需要等待的时间加上当前时间 即 未来某一时刻 timeout 通过 timespec 结构指定 struct timespec time t tv sec time t tv nsec 可以使用 gettimeofday 获取用 timeval 表示的当前时间 然后把等待时间转化成 timespec 结构 可以使用一下函数得到 timeout 值得绝对时间 void maketimeout struct timespec tsp long minutes struct timeval now gettimeofday 获取当前时间 tsp tv sec now tv sec tsp tv nsec now tv usec 1000 usec 转换成 nsec tsp tv sec minutes 60 pthread cond signal 和 pthread cond broadcast 两个函数用来通知线程条件已经
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 滴滴单车转让协议书范本
- 租房回收协议书范本
- 酒类合伙开店协议书范本
- 心理健康调节情绪课件
- 入资合同协议书范本
- 2025版专业物流公司货车司机劳务合作协议范本
- 二零二五版动迁户房屋买卖及售后服务保障协议
- 二零二五电商运营合作协议书员工范本
- 2025年度睿联带压封堵技术成熟管道修复专项服务合同
- 2025版建筑行业建筑工程一切险专业服务合同
- 2025年司法局司法辅助岗招聘考试笔试试卷(附答案)
- 宿州埇桥20MWp光伏电站项目接网电能质量评估报告
- 高校各级党组织和广大党员在网络空间发挥作用研究
- 事故处置预案
- 企业国有资产管理法规培训
- 工贸安全培训试题及答案
- 《肺结节规范化诊治专家共识(2024)》解读 课件
- 中国混凝土搅拌站行业发展前景及发展策略与投资风险研究报告2025-2028版
- 希沃白板介绍使用课件
- 2025年云南省中考化学真题(解析版)
- 2025年河南省中考化学试卷及答案
评论
0/150
提交评论