首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pthread中PTHREAD_CREATE_JOINABLE的用法是什么?

在C语言中,pthread是一个线程库,它提供了线程的创建、管理和同步等功能。PTHREAD_CREATE_JOINABLE是pthread库中的一个线程属性,它决定了线程的状态。

PTHREAD_CREATE_JOINABLE表示线程的状态是可连接的,也就是说,当线程执行完毕后,其他线程可以通过调用pthread_join()函数来等待该线程的结束,并获取该线程的返回值。这种状态下的线程可以被视为“可连接线程”。

使用PTHREAD_CREATE_JOINABLE创建的线程,需要在线程执行完毕后,调用pthread_join()函数来释放线程资源,否则会导致资源泄漏。

以下是一个使用PTHREAD_CREATE_JOINABLE创建线程的示例代码:

代码语言:c
复制
#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个线程,并在主线程中等待它们的结束并获取返回值。每个线程都会输出自己的开始和结束信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券