• 线程属性


    线程属性:
    attr中包含了以下的多个属性。
    初始化与销毁属性:
    int pthread_attr_init(pthread_attr_t* attr);
    int pthread_attr_destroy(pthread_attr_t* attr);

    获取与设置分离属性:
    int pthread_attr_getdetachstate(const pthread_attr_t* attr,int* detachstate);
    int pthread_attr_setdetachstate(pthread_attr_t* attr,int * detachstate);
    PTHREAD_CREATE_DETACHED 或者利用pthread_detach()函数。
    PTHREAD_CREATE_JOINABLE//默认不是分离的,需要调用pthread_join函数等待退出。


    获取与设置栈的大小:
    int pthread_attr_setstacksize(pthread_attr_t* attr,size_t stacksize);
    int pthread_attr_getstacksize(pthread_attr_t* attr,size_t* stacksize);

    获取或设置线程栈末尾警戒区大小
    int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
    int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize);

    //获取与设置线程竞争范围
    int pthread_attr_setscope(pthread_attr_t *attr, int scope);
    int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);
    PTHREAD_SCOPE_SYSTEM 进程范围内竞争
    PTHREAD_SCOPE_PROCESS 系统范围内竞争

    //获取与设置调度策略
    int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
    int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
    (相同优先级先进先出调度)SCHED_FIFO, (相同优先级基于抢占式调度,即使优先级相同)SCHED_RR, (默认)SCHED_OTHER

    //获取与设置继承调度策略
    int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
    int pthread_attr_getinheritsched(const pthread_attr_t *attr,int *inheritsched);
    PTHREAD_INHERIT_SCHED (主线程与新线程相同策略)
    PTHREAD_EXPLICIT_SCHED (调度策略属性需要自己设置)


    //获取与设置调度参数
    int pthread_attr_setschedparam(pthread_attr_t *attr,const struct sched_param *param);
    int pthread_attr_getschedparam(const pthread_attr_t *attr,struct sched_param *param);
    struct sched_param {
    int sched_priority; // Scheduling priority
    };


    //获取与设置并发级别。仅在N:M线程模型有效,设置并发级别给内核一个提示:表示提供给定级别数量的核心线程来映射用户线程是高效的。

    比如说:用户线程第一级映射成轻量级进程,轻量级进程再一 一映射至核心线程,每个核心线程映射一个CPU。只是提示内核提供多少个轻量级进程是高效的。
    int pthread_setconcurrency(int new_level);
    int pthread_getconcurrency(void);

     1 #include<unistd.h>
     2 #include<sys/types.h>
     3 #include<fcntl.h>
     4 #include<sys/stat.h>
     5 #include<stdlib.h>
     6 #include<stdio.h>
     7 #include<errno.h>
     8 #include<pthread.h>
     9 #include<string.h>
    10 #define ERR_EXIT(m)
    11     do
    12     {
    13         perror(m);
    14         exit(EXIT_FAILURE);
    15     }while(0
    16 int main(void)
    17 {
    18     pthread_attr_t attr;
    19     pthread_attr_init(&attr);//attr中有很多  线程属性的默认值
    20     int state;
    21     //默认属性是不分离的。要调用pthread_join来防止僵尸
    22     pthread_attr_getdetachstate(&attr,&state);
    23     if(state==PTHREAD_CREATE_JOINABLE)
    24         printf("detachedstate:PTHREAD_CREATE_JOINABLE
    ");
    25     else if(state==PTHREAD_CREATE_DETACHED)
    26         printf("detachedstate:PTHREAD_CREATE_DETACHED
    ");    //打印线程默认分离属性。
    27     
    28     size_t size;
    29     pthread_attr_getstacksize(&attr,&size);
    30     printf("stack size:%d
    ",size);
    31     //获取警戒缓冲区的大小
    32     pthread_attr_getguardsize(&attr,&size);
    33     printf("guardsize:%d
    ",size);
    34     
    35     int scope;
    36     pthread_attr_getscope(&attr,&scope);
    37     if(scope==PTHREAD_SCOPE_PROCESS)
    38         printf("scope:PTHREAD_SCOPE_PROCESS
    ");
    39     if(scope==PTHREAD_SCOPE_SYSTEM)
    40         printf("scope:PTHREAD_SCOPE_SYSTEM
    ");
    41     //获取与设置调度策略
    42     int policy;
    43     pthread_attr_getschedpolicy(&attr,&policy);
    44     if(policy==SCHED_FIFO)
    45         printf("policy:SCHD_FIFO
    ");
    46     else if(policy==SCHED_RR)
    47         printf("policy:SCHED_RR
    ");
    48     else if(policy==SCHED_OTHER)
    49         printf("policy:SCHED_OTHER
    ");    
    50     //获取与设置继承调度策略
    51     int inheritsched;
    52     pthread_attr_getinheritsched(&attr,&inheritsched);
    53     if(inheritsched== PTHREAD_INHERIT_SCHED)
    54         printf("inheritsched: PTHREAD_INHERIT_SCHED
    ");
    55     else if(inheritsched==PTHREAD_EXPLICIT_SCHED)
    56         printf("inheritsched: PTHREAD_EXPLICIT_SCHED");
    57     //获取与设置调度参数
    58     struct sched_param param;
    59     pthread_attr_getschedparam(&attr,&param);
    60     //调度优先级
    61     printf("sched_priority:%d
    ",param.sched_priority);
    62 
    63     pthread_attr_destroy(&attr);
    64     //并发级别获取
    65     int level;
    66     level=pthread_getconcurrency();
    67     printf("level:%d
    ",level);
    68     return 0;
    69 
    70 }
  • 相关阅读:
    在react中使用css module
    Hoisting(变量提升)
    JS 实现货币格式化
    使用promise封装一个retry
    【要命的神奇bug】if条件 使用 正则表达式
    iframe内媒体查询的问题
    iframe嵌套登录页-页面无法加载
    Sketch Measure切图插件无法导出标注 (换插件绕过解决)
    python项目中获取当前文件所在目录
    上传文件踩到的坑
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8497091.html
Copyright © 2020-2023  润新知