• 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)
     
  • 相关阅读:
    vim for python配置
    Python学习的一些好资料
    【Python开发实战】Python环境的配置
    【Python开发实战】Windows7+VirtualBox+Ubuntu环境配置
    linux下shapely的安装
    【python常用模块】os.path
    linux下gdal的python包的安装
    由二叉树的前序遍历和中序遍历,求其后序遍历
    ASCII码表
    C++标准库函数之排列函数
  • 原文地址:https://www.cnblogs.com/caidi/p/10571267.html
Copyright © 2020-2023  润新知