- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
我们可以把线程的各种属性标志作为参数传递给ACE_Task_Base::active()方法,这样就可以创建具有某种或某些特殊属性的线程了;这些属性定义了线程将怎样被创建、调度、销毁等等;? ? 线程创建标志:? ? THR_CANCEL_DISABLE : 不允许这个线程被取消;? ? THR_CANCEL_ENABLE??: 允许这个线程被取消;? ? THR_CANCEL_DEFERRED: 只允许延迟的取消;? ? THR_BOUND? ?? ?? ? : 创建一个线程,并绑定到一个可由内核调度的实体上;? ? THR_NEW_LWP? ?? ???: 创建一个内核级线程;该标志影响进程的并发属性;对未绑定线程来说,其预想的并发级别是增1,也就是添加一个新的内核线程到可用的线程池中,以运行用 户线程;在不支持N:M混合线程模型的OS平台上,该标志会被忽略;? ? THR_DETACHED? ?? ? : 创建一个分离的线程;这就意味着这个线程的退出状态不能被其它线程访问;当这个线程退出的时候,其线程ID和它所占用的资源会被OS自动回收;? ? THR_JOINABLE? ?? ? : 允许新创建的线程被会合(join);这就意味着这个线程的退出状态能够被其它线程访问,可以通过join()方法来访问它的退出状态,但是它的线程 ID和它所占用的资源不会被OS回收;所有ACE线程创建方法的默认行为都是THR_JOINABLE;? ? THR_SUSPENDED? ?? ?: 创建一个线程,但让其处在挂起状态;? ? THR_DAEMON? ?? ?? ?: 创建一个看守(daemon)线程;? ? THR_SCHED_FIFO? ???: 如果可用,使用FIFO政策调度新创建的线程;? ? THR_SCHED_RR? ?? ? : 如果可用,使用round-robin方案调度新创建的线程;? ? THR_SCHED_DEFAULT??: 使用操作系统上可用的无论哪种默认调度方案;? ? THR_SCOPE_SYSTEM? ?: 新线程在系统调度争用空间中创建,永久绑定于新创建的内核线程;? ? THR_SCOPE_PROCESS??: 新线程在进程调度争用空间中创建,也就是说,它将作为一个用户线程运行;? ? 线程的这些属性标志通过逻辑或运算符|串在一起,并把它作为ACE_Task_Base::active()方法的第一个参数传递给该方法;如:? ? ACE_Task_Base:active(THR_NEW_LWP | THR_SCHED_DEFAULT | THR_SUSPENDED | THR_JOINABLE);? ? 调度竞争范围:? ? 大多数OS都在内核级线程和用户级线程之间作出了区分;内核级线程是这样的可调度实体:OS知道它们,并且会通过内核级的调度器对它们进行调度.而另一方 面,用户级线程是量级更轻的线程,由基于库的调度器在进程的地址空间中对其进行调度.这样的线程允许速度更快的上下文切换,但是可能会被阻塞.作为程序 员,你只能处理用户级线程.你的进程会得到一个内核线程池,用于调度你所有的用户级线程;你可以使用THR_BOUND标志显式地把一个用户级线程绑定到 一个特定的内核线程上去;这样被绑定的用户级线程的调度就会使用底层的内核级线程来完成;? ? 如果你指定要在创建线程时使用THR_NEW_LWP标志,那么,你可以确信,一个新的内核级可调度实体也将被创建;也就是说,这个新的用户级线程被绑定 到一个新的内核级线程上;这是ACE_Task_Base::active()方法的默认行为;但是,如果你指定了自己的属性标志参数,并且没有包含 THR_NEW_LWP标志,那么线程库就会创建一个用户级线程;? ? 一旦ACE_Task_Base::active()方法返回,OS就已经创建了一个新的线程了;但是,这并没有说明关于新线程的当前运行状态的任何情 况;OS会使用其特有的某种内部调度方案来决定何时运行新线程.所以,即使线程已经创建,当active()方法返回时,它也未必就在运行;? ? 通过指定THR_SUSPENDED标志,你可以在一定程度上控制线程的初始运行状态.这个标志会使OS创建处在挂起状态的新线程;你可以调用resume()方法来激活这个处于挂起状态的新线程而让它开始运行;? ? 线程的优先级和调度类:? ? 大多数OS都会以自己的方式来定义线程的优先级;例如:Solaris定义的优先级范围是0--127,127是最高优先级;Windows定义的优先级范围是0--15,15是最高优先级;而VxWorks定义的优先级是0--255,0是最高优先级;? ? 大
原创力文档


文档评论(0)