【Linux系统编程】线程_01_线程基本API_05_线程游离detach

pthread_detach

  1. 功能:线程游离
  2. 原型
int pthread_detach(pthread_t thread);
  1. 参数
    1)tid
  2. 返回值
    成功:返回0
    失败:返回错误码,不会设置errno
  3. DO
#include <func.h>

typedef struct {
    int id;
    char name[25];
    char gender;
    int chinese;
    int math;
    int english;
} Student;

void print_stu_info(Student* s) {
    printf("%d %s %c %d %d %d\n",
           s->id,
           s->name,
           s->gender,
           s->chinese,
           s->math,
           s->english);
}

void* start_routine(void* args) {
    // 注意:不能返回指向该线程栈上数据的指针
    // 因为当线程退出的时候,该线程的栈会销毁!
    // Student s = {1, "xixi", 'f', 100, 100, 100};

    Student* s = (Student*) malloc(sizeof(Student));
    s->id = 1;
    strcpy(s->name, "xixi");
    s->gender = 'f';
    s->chinese = 100;
    s->math = 100;
    s->english = 100;

    return (void*) s;
}

int main(int argc, char* argv[])
{
    // 主线程
    pthread_t tid1;

    int err = pthread_create(&tid1, NULL, start_routine, NULL);
    if (err) {
        error(1, err, "pthread_create");
    }

    // 主线程主动调用 pthread_detach
    err = pthread_detach(tid1);   // 使tid1处于游离状态
    if (err) {
        error(1, err, "pthread_detach %lu", tid1);
    }

    // 主线程:等待子线程结束,并接收返回值
    Student* s1;
    err = pthread_join(tid1, (void**)&s1); // 无限期等待
    if (err) {
        error(1, err, "pthread_join %lu", tid1);
    }

    print_stu_info(s1);

    free(s1);

    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值