PTHREAD_GETATTR_DEFAULT_NP - Linux手册页

时间:2019-08-20 18:01:03  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-06-09

名称

pthread_getattr_default_np,pthread_setattr_default_np,-获取或设置默认线程创建属性

语法

#define _GNU_SOURCE             /* See feature_test_macros(7) */
#include <pthread.h>

int pthread_getattr_default_np(pthread_attr_t *attr);
int pthread_setattr_default_np(pthread_attr_t *attr);

Compile and link with -pthread.

说明

pthread_setattr_default_np()函数设置用于创建新线程的默认属性,即使用第二个参数NULL调用pthread_create(3)时使用的属性。默认属性是使用* attr中提供的属性设置的,* attr是先前初始化的线程属性对象。请注意有关提供的属性对象的以下详细信息:

*
对象中的属性设置必须有效。
*
不能在对象中设置堆栈地址属性。
*
将堆栈大小属性设置为零意味着保持默认堆栈大小不变。

pthread_getattr_default_np()函数初始化attr引用的线程属性对象,以便它包含用于线程创建的默认属性。

错误说明

EINVAL
(pthread_setattr_default_np())attr中的属性设置之一无效,或者在attr中设置了堆栈地址属性。
ENOMEM
(pthread_setattr_default_np())内存不足。

版本

从版本2.18开始,这些功能在glibc中可用。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
pthread_getattr_default_np(),pthread_setattr_default_np()Thread safetyMT-Safe

遵循规范

这些功能是非标准的GNU扩展。因此其名称后缀" _np"(不可移植)。

示例

下面的程序使用pthread_getattr_default_np()来获取默认的线程创建属性,然后从返回的线程属性对象中显示各种设置。运行该程序时,我们看到以下输出:

$ ./a.out
Stack size:          8388608
Guard size:          4096
Scheduling policy:   SCHED_OTHER
Scheduling priority: 0
Detach state:        JOINABLE
Inherit scheduler:   INHERIT

Program source

#define _GNU_SOURCE
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#define errExitEN(en, msg) \
                        do { errno = en; perror(msg); \
                             exit(EXIT_FAILURE); } while (0)

static void
display_pthread_attr(pthread_attr_t *attr)
{
    int s;
    size_t stacksize;
    size_t guardsize;
    int policy;
    struct sched_param schedparam;
    int detachstate;
    int inheritsched;

    s = pthread_attr_getstacksize(attr, &stacksize);
    if (s != 0)
        errExitEN(s, "pthread_attr_getstacksize");
    printf("Stack size:          %zd\n", stacksize);

    s = pthread_attr_getguardsize(attr, &guardsize);
    if (s != 0)
        errExitEN(s, "pthread_attr_getguardsize");
    printf("Guard size:          %zd\n", guardsize);

    s = pthread_attr_getschedpolicy(attr, &policy);
    if (s != 0)
        errExitEN(s, "pthread_attr_getschedpolicy");
    printf("Scheduling policy:   %s\n",
            (policy == SCHED_FIFO) ? "SCHED_FIFO" :
            (policy == SCHED_RR) ? "SCHED_RR" :
            (policy == SCHED_OTHER) ? "SCHED_OTHER" : "[unknown]");

    s = pthread_attr_getschedparam(attr, &schedparam);
    if (s != 0)
        errExitEN(s, "pthread_attr_getschedparam");
    printf("Scheduling priority: %d\n", schedparam.sched_priority);

    s = pthread_attr_getdetachstate(attr, &detachstate);
    if (s != 0)
        errExitEN(s, "pthread_attr_getdetachstate");
    printf("Detach state:        %s\n",
            (detachstate == PTHREAD_CREATE_DETACHED) ? "DETACHED" :
            (detachstate == PTHREAD_CREATE_JOINABLE) ? "JOINABLE" :
            "???");

    s = pthread_attr_getinheritsched(attr, &inheritsched);
    if (s != 0)
        errExitEN(s, "pthread_attr_getinheritsched");
    printf("Inherit scheduler:   %s\n",
            (inheritsched == PTHREAD_INHERIT_SCHED) ? "INHERIT" :
            (inheritsched == PTHREAD_EXPLICIT_SCHED) ? "EXPLICIT" :
            "???");
}

int
main(int argc, char *argv[])
{
    int s;
    pthread_attr_t attr;

    s = pthread_getattr_default_np(&attr);
    if (s != 0)
        errExitEN(s, "pthread_getattr_default_np");

    display_pthread_attr(&attr);

    exit(EXIT_SUCCESS);
}

另外参见

pthread_attr_getaffinity_np(3),pthread_attr_getdetachstate(3),pthread_attr_getguardsize(3),pthread_attr_getinheritsched(3),pthread_attr_getschedparam(3),pthread_attr_getschedpolicycy(3),pthread_attr_getr(get)() pthread_attr_init(3),pthread_create(3),pthreads(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/