您的位置:首页 > 运维架构 > Linux

ubuntu线程的属性PTHREAD_CREATE_JOINABL和PTHREAD_CREATE_DETACHED

2016-06-30 14:14 609 查看
属性介绍:

pthread_attr_t attr;//定义属性变量

pthread_attr_init(&attr);//初始化属性变量

pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);//设置属性变量

//pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);//线程默认属性

pthread_join(tid,&retstat); //只有设置为JOINABLE才可以配套使用这个函数,如果设置为DETACHED,则不再支持JOINABLE

pthread_attr_destroy(&attr);//释放属性变量

程序例子代码如下所示:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <pthread.h>

#include <unistd.h>

void *function(void *message)

{

    printf("input to thread %s\n",(char *)message);

    strcpy(message,"maked by thread");

    pthread_exit("test!!!!!!");

}

char message[] = "hello world";

int main()

{

    pthread_t tid;   

    void *retstat;

    int ret = 0;

    pthread_attr_t attr;//定义属性变量

    pthread_attr_init(&attr);//初始化属性变量

    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);//设置属性变量

    //pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);//线程默认属性

    //创建线程

    ret = pthread_create(&tid,&attr,function,(void *)message);

    if(ret != 0)

    {

        perror("pthread_create failed:");

        exit(0);

    }

    sleep(2);    

    printf("message:%s\n",message);

    //等待子线程的退出,阻塞函数

    pthread_join(tid,&retstat);

    printf("thread exit status:%s\n",(char *)retstat);

    printf("message:%s\n",message);

    pthread_attr_destroy(&attr);//释放属性变量

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 线程