侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

pthread_join函数用法详解

noerror
2022-10-04 / 0 评论 / 0 点赞 / 385 阅读 / 699 字 / 正在检测是否收录...

pthread_join函数用法详解

pthread_join函数简介

  • 头文件包含
#include <pthread.h>
  • 函数定义
int pthread_join(pthread_t  thread , void ** retval );
  • 编译链接选项
-pthread

pthread_join函数常见使用错误

  • 链接错误
    undefined reference to `pthread_join'
    解决办法:添加链接选项
-pthread
  • 编译错误
    warning: implicit declaration of function ‘pthread_join’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <pthread.h>

pthread_join函数详细描述

pthread_join ()函数等待thread指定的线程终止。如果线程已经终止,那么pthread_join ()将立即返回。thread指定的线程必须是可接合的。
如果retval不为NULL,则pthread_join ()复制目标线程的退出状态(即,如果目标线程被取消,则目标线程提供给pthread_exit (3))的值将被复制到retval 指向的位置,然后 PTHREAD_CANCELED 将被放置在retval 指向的位置
如果多个线程同时尝试用同一线程联接,结果是未定义的。如果调用pthread_join ()的线程被取消,那么目标线程将保持可接合(即,它将不会被分离)。

pthread_join函数返回值

成功时,pthread_join ()返回0;出错时,它返回一个错误号。

pthread_join函数错误码

  • EDEADLK 检测到死锁(例如,两个线程试图相互连接);或者thread指定调用线程。
  • EINVAL thread不是可接合线程。
  • EINVAL 另一个线程已在等待加入此线程。
  • 找不到ID为thread的线程。

pthread_join函数其他说明

成功调用pthread_join ()后,调用方保证目标线程已经终止。然后,调用方可以选择在终止线程之后进行任何需要的清理(例如,释放分配给目标线程的内存或其他资源)。
与以前已联接的线程联接会导致未定义的行为。
如果不能与可接合的线程(即,未分离的线程)连接,则会产生“僵尸线程”。避免这样做,因为每个僵尸线程都会消耗一些系统资源,当僵尸线程积累足够多时,将不再可能创建新的线程(或进程)。
没有类似于"waitpid(-1\ &status\ 0)" 的pthreads,即“与任何终止的线程连接”。如果您认为您需要此功能,您可能需要重新考虑您的应用程序设计。
进程中的所有线程都是对等点:任何线程都可以与进程中的任何其他线程连接。

pthread_join函数使用举例

参见pthread_create (3)

0

评论区