• linux入门学习17


    线程函数

    pthread_exit函数
    将单个当前线程退出
    void pthread_exit(void *retval)
    参数: retval表示线程退出状态,通常传NULL
    pthread_join函数
    阻塞等待线程退出,获取线程退出状态 其作用, 对应进程中wait() 函数。
    int pthread_join(pthread_t thread, void **retval);
    参数1: 传入thread: 线程ID;
    参数2: retval: 存储线程结束状态。
    pthread_detach函数
    实现线程分离
    线程分离状态:指定该状态,线程主动与主控线程断开关系。
    int pthread_detach(pthread_t thread);
    参数:thread 需要分离的线程id
    pthread_cancel函数
    杀死(取消)一个线程,需要取消点 [其作用对应进程中kill()函数]
    int pthread_cancel(pthread_t thread);
    参数:thread 待杀死的线程id
    控制原语对比
    线程控制原语进程控制原语
    pthread_create()fork()
    pthread_self()getpid()
    pthread_join()wait()
    pthread_cancel()kill()
    pthread_detach/

    线程属性

    typedef struct
    {
            int detachstate;                                                      //线程的分离状态。
            int schedpolicy;                                                      //线程调度策略。
            struct sched_param schedparam;                         //线程的调度参数。
            int inhertsched;                                                      //线程的继承性。
            int scope;                                                               //线程的作用域。
            size_t guardsize;                                                   //线程栈末尾的警戒缓冲区大小
            int stackaddr_set;                                                  //线程栈的设置,
            void *stackaddr;                                                     //线程栈的位置。
            size_t stacksize;                                                    //线程栈的大小。
    }pthread_attr_t;
    主要结构体成员 :
    1. 线程分离状态。
    2. 线程栈大小 ( 默认平均分配 )
    3. 线程栈警戒缓冲区大小 ( 位于栈末尾 )

    线程属性初始化
    注意 : 应先初始化线程属性,再 pthread_ create 创建线程。
    初始化线程属性。
    int pthread_attr_init(pthread_attr_t *attr);
    销毁线程属性所占用的资源。
    int pthread_attr_destroy(pthread_attr_t *attr);
    这两个函数常常成对出现
    线程的分离状态
    线程的分离状态决定一个线程以什么样的方式来终止自己。
    非分离状态线程的默认属性是非分离状态 , 这种情况下 , 原有的线程等待创建的线程结束。只有当
    pthread_join() 函数返回时,创建的新线程才算终止 , 才能释放自己占用的系统资源。
    分离状态 : 分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。
    设置线程属性,分离 or 非分离
    int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
    获取程属性,分离 or 非分离。
    int pthread_attr_getdetachstate(pthread_attr_t * attr, int *detachstate);
    设置分离属性
    1. 创建一个线程
    2. 初始化线程
    3. 设置分离态
    4. 利用分离态属性创建新的线程
    5. 销毁初始化
  • 相关阅读:
    用HTML+CSS+JS写的切水果小游戏它来了
    NLP中的文本分类、实体识别、关系识别和三元组识别
    python实现将图片数据以TFRecord方式存储
    MySQL查询条件时间忽略时分秒
    探秘Elasticsearch:高性能搜索引擎的原理与应用场景(一)
    送你一份价值10W的非专业的面试技巧
    Vue中组件化编码使用(实战练习一)
    2023NOIP A层联测14 修路
    【SQLite】一、SQLite简介——MySQL的简洁版
    Python进阶——装饰器
  • 原文地址:https://blog.csdn.net/Sj740383500/article/details/127575895