2015linux多线程编程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.创建缺省线程 2 2.终止线程 2 3. 等待线程终止 2 pthread_exit和pthread_join进一步说明: 3 4.分离线程 7 5.获取线程标识符 8 6.比较线程ID 8 7. 一次性初始化 8 8. 设置线程的调度策略和优先级 9 9. 获取线程的优先级 11 10.取消线程 12 取消线程,是否会释放线程的所有资源?例子: 14 设置取消类型 16 11.初始化属性 17 12.设置分离状态 18 13.设置范围 18 14. 设置继承的调度策略 18 16. 设置调度参数 19 17.初始化互斥锁 21 18.销毁互斥锁 21 19.锁定互斥锁 22 20.解除锁定互斥锁 23 21. 互斥锁的类型: 23 22. 初始化互斥锁属性对象 23 23. 销毁互斥锁属性对象 23 24.设置互斥锁类型的属性 24 互斥锁动态初始化和静态初始化区别: 26 销毁互斥锁:事实上没做任何销毁操作,如下: 27 非递归类型的互斥锁解锁和加锁操作: 27 29.初始化条件变量 27 30.基于条件变量阻塞 27 31.解除阻塞一个线程 28 31.解除阻塞所有线程 29 33. 在指定的时间之前阻塞 30 32.唤醒丢失问题 31 33. 计数信号量概述 31 34. 初始化信号 31 35. 增加信号 31 36. 基于信号计数进行阻塞 32 37.多线程链表添加删除例子(使用条件变量实现互斥): 32 38.为线程特定数据创建键 34 39. 删除线程特定数据键 35 40.设置线程特定数据 35 41. 获取线程特定数据 35 读写锁属性初始化: 36 销毁读写锁属性对象: 36 设置读写锁共享属性: 37 初始化读写锁: 37 销毁读写锁: 37 读写锁总结: 39 获得写锁: 39 获得读锁: 40 1.创建缺省线程 int pthread_create(pthread_t *tid, cons、劈劈啪啪劈劈啪啪破婆婆t pthread_attr_t *tattr, void*(*start_routine)(void *), void *arg); 参数: 当pthread_create() 成功时,所创建线程的ID 被存储在由tid 指向的位置中。第二个参数用于设置线程属性,如果不需要特殊的属性,可以简单的设置该参数为NULL,最后两个参数告诉线程将要启动执行的函数和传递给该函数的参数。 返回值: 调用成功完成后返回0,其他的值都表示出现错误。 如果检测到以下任一情况,pthread_create() 将失败并返回相应的值。 EAGAIN 超出了系统限制,如创建的线程太多。 EPERM 调用者没有适当的权限设置所需的参数或安排调度策略 EINVAL: tattr 的值无效。(设置的属性有问题) 默认属性:绑定,非分离,继承创建者线程中定义的调度策略。 2.终止线程 void pthread_exit(void *status); 本函数可用来终止调用线程。将释放调用线程所有特定数据绑定。如果调用线程尚未分离,则线程ID 和status 指定的退出状态将保持不变,直到应用程序调用pthread_join() 以等待该线程。否则,将忽略status。线程ID 可以立即回收。 有一个重要的特殊情况,即当初始线程(即调用main() 的线程)从main() 调用返回时或调用exit() 时,整个进程及其所有的线程将终止。因此,一定要确保初始线程不会从main()过早地返回,在其它线程调用exit()也会终止整个进程。 请注意,如果主线程仅仅调用了pthread_exit,则仅主线程本身终止。进程及进程内的其他线程将继续存在。所有线程都已终止时,进程也将终止。 3. 等待线程终止 int pthread_join(thread_t tid, void **status); 参数: 参数tid指定要等待的线程ID,指定的线程必须位于当前的进程中,而且不得是分离线程。 当参数status 不是NULL 时,status 指向某个位置,在pthread_join() 成功返回时,将该位置设置为已终止线程的退出状态。 返回值: 调用成功完成后,pthread_join() 将返回零。其他任何返回值都表示出现了错误。如果检测到以下任一情况,pthread_join() 将失败并返回相应的值。 ESRCH 描述: 没有找到与给定的线程ID 相对应的线程。 EDEADLK 描述: 将出现死锁,如一个线程等待其本身,或者线程A和线程B 互相等待。 EINVAL 描述: 与给定的线程ID 相对应的线程是分离线程。 说明: 如果多个线程等待同一个线程终止,则所有等待线程将一直等到目标线程终止。然后,一个等待线程成功

文档评论(0)

AnDyqaz + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档