关于线程退出方式.PDF

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

关于线程退出方式 一般来说,线程有4 种退出方式: (1) 线程执行完后隐式退出,即不调用任何结束线程的函数,自动退出; (2 ) 由线程自身调用pthread_exit(void *retvalue)显示退出,这是一种自杀式退出方式; (3 ) 被其他线程调用pthread_cancel (pthread_t thread)结束由thread 指定的线程,调用是 异步的,且不管对方线程是否满足正常退出条件,都会惨无人道的强杀对方; (4 ) 被其他线程调用pthread_join (pthread_t thread, void** retvalue)结束由thread 指定的线 程,该调用会挂起当前线程直到对方线程正常退出为止,这是一种比较人道的他杀; 各种情况测试: (1)测试pthread_cancel 是否是异步调用,即不会阻塞当前线程; 确实是异步调用,不会阻塞。而且即使对方线程没有满足退出条件,也可以强制使其退出。 (2 )测试pthread_join 是否是阻塞调用,即会一直等到对方线程杀死为止; 确实是阻塞调用,且如果对方线程没有满足退出条件,会一直阻塞等待对方线程满足退出条 件,这样很容易引起死锁,因此调用pthread_join 之前必须先使对方线程的退出条件得到满 足。 (3 )如果对方线程已经退出,调用pthread_cancel 会得到什么返回值? [ESRCH] No thread could be found corresponding to that specified by the given thread ID. (4 )如果对方线程已经退出,调用pthread_join 会得到什么返回值?会一直阻塞吗? 不会阻塞,会立即返回“0 ”值,表明线程已经退出。 (5 )先调用pthread_cancel,再调用pthread_join 会得到什么结果? 结果同(4 ) (6)如果线程一直阻塞等待mutex,调用pthread_cancel 会怎么样?能正常结束目标线程 吗? 调用pthread_cancel 后会立即返回,且返回值为“0 ”,但目标线程并没有真正结束,还是一 直在等mutex 。但是如果用pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS, oldtype) 在目标线程里设置取消类型为 PTHREAD_CANCEL_ASYNCHRONOUS 后, pthread_cancel 可以正常结束目标线程。 (7 )如果线程一直阻塞等待mutex,调用pthread_join 会怎么样?能正常结束目标线程吗? 不管目标线程的取消类型是否为 PTHREAD_CANCEL_ASYNCHRONOUS ,都不能正常结 束目标线程,且会阻塞在pthread_join 上,实际上取消类型只对pthread_cancel 有效。 (8 )如果线程一直阻塞在条件等待,调用pthread_cancel 会怎么样?能正常结束目标线程 吗? pthread_cond_wait()和pthread_cond_timedwait()及sem_wait()都被实现为取消点,可以正常结 束目标线程,但如果pthread_cond_wait()被取消,mutex 是保持锁定状态的,因而需要定义 退出回调函数来为其解锁。 void * child1(void *arg) { pthread_cleanup_push(pthread_mutex_unlock,mutex); while(1) { pthread_mutex_lock(mutex); pthread_cond_wait(cond,mutex); pthread_mutex_unlock(mutex); sleep(5); } pthread_cleanup_pop(0); /* comment 2 */ } 线程取消详细介绍(pthread_cancel) 1、线程取消的定义 一般情况下,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线 程发来的终止(取消)请求而强制终止。 2、线程取消的语义 线程取消的方法是向目标线程发Cancel 信号,

文档评论(0)

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

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

1亿VIP精品文档

相关文档