在C语言中,pthread是一个线程库,它提供了线程的创建、管理和同步等功能。PTHREAD_CREATE_JOINABLE是pthread库中的一个线程属性,它决定了线程的状态。
PTHREAD_CREATE_JOINABLE表示线程的状态是可连接的,也就是说,当线程执行完毕后,其他线程可以通过调用pthread_join()函数来等待该线程的结束,并获取该线程的返回值。这种状态下的线程可以被视为“可连接线程”。
使用PTHREAD_CREATE_JOINABLE创建的线程,需要在线程执行完毕后,调用pthread_join()函数来释放线程资源,否则会导致资源泄漏。
以下是一个使用PTHREAD_CREATE_JOINABLE创建线程的示例代码:
#include<stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_func(void *arg)
{
int *num = (int *)arg;
printf("thread %d start\n", *num);
sleep(1);
printf("thread %d end\n", *num);
pthread_exit((void *)(*num));
}
int main(void)
{
pthread_t thread_id[5];
int thread_num[5] = {1, 2, 3, 4, 5};
int i, ret;
// 设置线程属性
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
// 创建线程
for (i = 0; i < 5; i++) {
ret = pthread_create(&thread_id[i], &attr, thread_func, (void *)&thread_num[i]);
if (ret != 0) {
printf("create thread %d failed\n", i);
exit(1);
}
}
// 等待线程结束并获取返回值
for (i = 0; i < 5; i++) {
void *thread_result;
ret = pthread_join(thread_id[i], &thread_result);
if (ret != 0) {
printf("join thread %d failed\n", i);
exit(1);
}
printf("thread %d result: %d\n", i, (int)thread_result);
}
// 销毁线程属性
pthread_attr_destroy(&attr);
return 0;
}
在这个示例代码中,我们使用PTHREAD_CREATE_JOINABLE创建了5个线程,并在主线程中等待它们的结束并获取返回值。每个线程都会输出自己的开始和结束信息。
云+社区技术沙龙[第4期]
高校公开课
TVP分享会
实战低代码公开课直播专栏
腾讯数字政务云端系列直播
腾讯技术创作特训营第二季第5期
DBTalk技术分享会
云+社区技术沙龙第33期
高校公开课
云+社区技术沙龙[第5期]
领取专属 10元无门槛券
手把手带您无忧上云