zoukankan      html  css  js  c++  java
  • 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)
     
  • 相关阅读:
    VS扩展开发 二 从示例程序出发
    VS扩展开发 一 导航
    CLR笔记 二 函数调用
    使用C#调用C++类库
    C#编程常用工具总结
    CLR笔记 一 概述
    C#工程中 使用targets和props实例
    VS C++工程的静态库引用问题
    C#高级编程笔记(三)
    (转)如何让CPU的使用率一直在50%
  • 原文地址:https://www.cnblogs.com/caidi/p/10571267.html
Copyright © 2011-2022 走看看