• linux线程 join/detach


    linux中创建线程时,可以通过 __attr 指定线程的属性

    extern int pthread_create (pthread_t *__thread, __const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg);

    线程属性有四个:

    1.detachstate 线程的分离状态属性

    #include <pthread.h>
    int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr, int *detachstate);
    int pthread_attr_setdetachstate(const pthread_attr_t *attr, int *detachstate);

    可以使用pthread_attr_setdetachstate把线程属性detachstate设置为以下两个合法值之一:PTHREAD_CREATE_DETACHED,PTHREAD_CREATE_JOINABLE。线程的分离状态决定一个线程以什么样的方式来终止自己。

    JOINABLE属性即为非分离状态,这种状态的线程,可以被其他线程等待,pthread_join返回时,线程释放资源。原有的线程等待创建的线程结束,只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。如果其没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收,需要将线程的退出代码返回到父进程,才能终止自己。

    分离状态的终止的线程,不能被其他线程等待,线程结束后直接释放资源。如果在创建线程时就知道不需要了解线程的终止状态,可以修改pthread_attr_t结构中的detachstate属性,让线程一开始就处于分离状态。

    在子线程中加入代码 pthread_detach(pthread_self()) 或者父线程调用 pthread_detach(thread_id)(非阻塞,可立即返回),这将该子线程的状态设置为分离的(detached),如此一来,该线程运行结束后会自动释放所有资源。

    2.guardsize 线程栈末尾的警戒缓冲区大小(字节数)

    3.stackaddr 线程栈的最低地址

    4.stacksize 线程栈的最小长度
    #include <pthread.h>
    int pthread_attr_getstacksize(const pthread_attr_t *restrict attr, size_t *restrict stacksize)
    int pthread_attr_setstacksize(pthread_attr_t *attr, size_t *stacksize)
     
  • 相关阅读:
    ASP VNext 开源服务容错处理库Polly使用文档
    .NET Core开源API网关 – Ocelot中文文档
    Open ID Connect(OIDC)在 ASP.NET Core中的应用
    ASP.NET Core 系列视频完结,新项目实战课程发布。
    这应该是目前最快速有效的ASP.NET Core学习方式(视频)
    极简版ASP.NET Core学习路径及教程
    全面理解 ASP.NET Core 依赖注入
    向ASP.NET Core迁移
    ASP.NET Core集成现有系统认证
    Gitlab CI 自动部署 asp.net core web api 到Docker容器
  • 原文地址:https://www.cnblogs.com/caidi/p/10571267.html
Copyright © 2020-2023  润新知