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/。