PTHREAD_GETATTR_DEFAULT_NP - Linux手册页
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)。
| Interface | Attribute | Value |
| pthread_getattr_default_np(),pthread_setattr_default_np() | Thread safety | MT-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/。

