Posix 多线程编程.pdf

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Posix 多线程编程

Posix线程编程指南(1) 内容: 一、 线程创建 二、线程取消 关于作者 线程创建与取消 杨沙洲(pubb@163.net) 2001 年 10 月 这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix线 程库API。本文是第一篇将向您讲述线程的创建与取消。 一、 线程创建 1.1 线程与进程 相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数 据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了 提高程序的并发度,从而提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正 相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。 1.2 创建线程 POSIX通过pthread_create()函数创建线程,API定义如下: intpthread_create(pthread_t*thread,pthread_attr_t*attr, void *(*start_routine)(void *), void*arg) 与fork()调用创建一个进程的方法不同,pthread_create()创建的线程并不具备与主线程(即 调用pthread_create()的线程)同样的执行序列,而是使其运行start_routine(arg)函数。thread 返回创建的线程ID,而attr是创建线程时设置的线程属性(见下)。pthread_create()的返回 值表示线程创建是否成功。尽管arg是void *类型的变量,但它同样可以作为任意类型的参 数传给start_routine()函数;同时,start_routine()可以返回一个void*类型的返回值,而这个 返回值也可以是其他类型,并由pthread_join()获取。 1.3 线程创建属性 pthread_create()中的attr参数是一个结构指针,结构中的元素分别对应着新线程的运行属性, 主要包括以下几项: __detachstate,表示新线程是否与进程中其他线程脱离同步,如果置位则新线程不能用 pthread_join() 来 同 步 , 且 在 退 出 时 自 行 释 放 所 占 用 的 资 源 。 缺 省 为 PTHREAD_CREATE_JOINABLE 状态。这个属性也可以在线程创建并运行以后用 pthread_detach()来设置,而一旦设置为PTHREAD_CREATE_DETACH状态(不论是创建时 设置还是运行时设置)则不能再恢复到PTHREAD_CREATE_JOINABLE状态。 __schedpolicy,表示新线程的调度策略,主要包括 SCHED_OTHER(正常、非实时)、 SCHED_RR(实时、轮转法)和SCHED_FIFO(实时、先入先出)三种,缺省为SCHED_OTHER, 后两种调度策略仅对超级用户有效。运行时可以用过pthread_setschedparam()来改变。 __schedparam,一个structsched_param结构,目前仅有一个sched_priority 整型变量表示线 程的运行优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有 效,并可以在运行时通过pthread_setschedparam()函数来改变,缺省为0。 __inheritsched , 有 两 种 值 可 供 选 择 : PTHREAD_EXPLICIT_SCHED 和 PTHREAD_INHERIT_SCHED,前者表示新线程使用显式指定调度策略和调度参数(即attr 中的值),而后者表示继承调用者线程的值。缺省为PTHREAD_EXPLICIT_SCHED。 __scope,表示线程间竞争CPU的范围,也就是说线程优先级的有效范围。POSIX的标准中 定义了两个值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示 与系统中所有线程一起竞争CPU 时间,后者表示仅与同进程中的线程竞争 CPU。目前 LinuxThreads仅实现了PTHREAD_SCOPE_SYSTEM一值。 pthread_attr_t结构中还有一些值,但不使用pthread_create()来设置。 为了设置这些属性,POSIX 定义了一系列属性设置函数,包括 pthread_attr_init()、 pthread_attr_destroy()和与各个属性相关的pthread_attr_get/pthread_attr_s

文档评论(0)

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

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

1亿VIP精品文档

相关文档