- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)