当前位置: 首页 > article >正文

linux之pthread_join函数

p t h r e a d _ j o i n pthread\_join pthread_join函数简介

p t h r e a d _ j o i n pthread\_join pthread_join函数可以用于等待一个指定线程的结束,并且收集该线程的返回值(如果有返回值的话)。


下面是 p t h r e a d _ j o i n pthread\_join pthread_join函数的语法:

int pthread_join(pthread_t thread, void **retval);

1. t h r e a d 1.thread 1.thread:要等待结束的线程的标识符。
2. r e t v a l 2.retval 2.retval:用于存储线程返回值的指针。如果该线程没有返回值,则该参数可以设置为 N U L L NULL NULL
调用 p t h r e a d _ j o i n pthread\_join pthread_join函数会阻塞当前线程,直到指定的线程结束为止。


p t h r e a d _ j o i n pthread\_join pthread_join函数特点

p h t r e a d _ j o i n phtread\_join phtread_join函数的第2个参数为 v o i d ∗ ∗ void** void ,为二重指针,接收的是线程函数中 p t h r e a d _ e x i t ( v o i d ∗ a r g ) ; pthread\_exit(void* arg); pthread_exit(voidarg);的参数 或者 或者 或者 r e t u r n return return 的值,可以用来查看 p t h r e a d _ e x i t pthread\_exit pthread_exit传递的参数(如果不关心退出状态, p h t r e a d _ j o i n phtread\_join phtread_join的这个参数可以置空,即 p h t r e a d _ j o i n ( t i d , N U L L ) phtread\_join(tid,NULL) phtread_join(tid,NULL)。
p t h r e a d _ j o i n pthread\_join pthread_join函数在线程退出时,用来清理线程资源。
p h t r e a d _ j o i n phtread\_join phtread_join函数会阻塞调用方,直至 p t h r e a d _ j o i n pthread\_join pthread_join所指的线程退出。


下面是一个使用 p t h r e a d _ j o i n pthread\_join pthread_join函数的例子:

代码

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void *my_thread_func(void *arg) {
    int i;
    int sum = 0;
    for (i = 1; i <= (int)arg; i++) {
        sum += i;
    }
    return (void *)sum;
}

int main() {
    pthread_t tid;
    int n = 5;
    if (pthread_create(&tid, NULL, my_thread_func, (void *)n) != 0) {
        printf("Error creating thread\n");
        return -1;
    }
    void *ret_val;
    if (pthread_join(tid, &ret_val) != 0) {
        printf("Error joining thread\n");
        return -1;
    }
    printf("Sum of %d numbers is %ld\n", n, (long)ret_val);
    return 0;
}

在这里插入图片描述

运行

在这里插入图片描述

解释

1.第一行:#include <pthread.h>。导入 pthread 库头文件。
2.第二行:#include <stdio.h>。导入标准输入输出库头文件。
3.第三行:#include <stdlib.h>。导入标准C 库的库文件。
4.第五行:void *my_thread_func(void *arg) {}。定义一个线程函数 my_thread_func,其参数类型为 void 指针,并返回一个指针。
5.第六行:int i;。定义一个整型变量 i,用于循环计算从1到n的和。
6.第七行:int sum = 0;。定义一个整型变量 sum,用于累加计算结果。
7.第八行:for (i = 1; i <= (int)arg; i++) {}。使用循环计算从1到n的和。
8.第九行:sum += i;。将每个数值累加到 sum 变量中。
9.第十一行:return (void *)sum;。返回计算结果,注意要将整型变量 sum 转换为 void 指针类型。
10.第十四行:定义 main 函数。
11.第十五行:pthread_t tid;。定义 pthread_t 类型的变量 tid,用于存储线程 ID。
12.第十六行:int n = 5;。定义一个整型变量 n,表示从1到n的整数之和。
13.第十七行:if (pthread_create(&tid, NULL, my_thread_func, (void *)n) != 0) {}。创建新线程并执行相应的函数,并将线程 ID 存储到 tid 中。如果创建线程失败,则打印错误信息并返回-1。
14第二十一行:void *ret_val;。定义一个 void 指针 ret_val,用于存储线程返回值
15.第二十二行:if (pthread_join(tid, &ret_val) != 0) {}。调用 pthread_join 函数等待指定线程结束,并获取其返回值。如果等待线程结束失败,则打印错误信息并返回-1。
16.第二十六行:printf(“Sum of %d numbers is %ld\n”, n, (long)ret_val);。打印从1到n的整数之和。
17.第二十七行:return 0;。返回程序正常执行结束的代码。


http://www.kler.cn/news/9759.html

相关文章:

  • 安全防御 --- APT、密码学
  • 《数据库系统概论》第三章课后习题 (4个表+三建工程项目)
  • JAVA所有版本特性【JAVA 1.0 - JAVA 20】
  • 圣戈班Saint-Gobain EDI需求分析
  • 计算机网络 - TCP的效率与特性
  • 从0到1基于ChatGLM-6B使用LaRA进行参数高效微调 审核中
  • 49.现有移动端开源框架及其特点—MACE( Mobile AI Compute Engine)
  • 3、ThingsBoard使用jar包单机部署
  • cadence allegro学习记录(四)
  • Golang每日一练(leetDay0030)
  • CDH 之 Kerberos 安全认证和 Sentry 权限控制管理(一)
  • 指令系统和寻址方式
  • 【C语言】switch语句的理解
  • 【RocketMQ】消息的拉取
  • 发布jar到maven中央仓库
  • 简单实用的IntelliJ IDEA集成配置Maven教程:高效构建Java项目
  • MAC 删除自带 ABC 输入法的方法
  • maya arnold自定义aov分层灯光组添加方法
  • 算法笔记-换根DP
  • OKR系统改变您的团队