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
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(void?arg);的参数
或者
或者
或者是
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所指的线程退出。
#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;。返回程序正常执行结束的代码。