名称

pthread_attr_setscope,pthread_attr_getscope-在线程属性对象中设置/获取竞争作用域属性

另外参见

pthread_attr_init(3),pthread_attr_setaffinity_np(3),pthread_attr_setinheritsched(3),pthread_attr_setschedparam(3),pthread_attr_setschedchedcycy(3),pthread_create(3),pthreads(7)

说明

pthread_attr_setscope()函数将attr引用的线程属性对象的竞争作用域属性设置为作用域中指定的值。竞争作用域属性定义了一组线程,线程与之竞争资源,例如CPU。 POSIX.1为范围指定两个可能的值:

PTHREAD_SCOPE_SYSTEM
线程与系统上所有进程中位于同一调度分配域(一组一个或多个处理器)中的所有其他线程竞争资源。 PTHREAD_SCOPE_SYSTEM线程根据其调度策略和优先级相对于彼此进行调度。
PTHREAD_SCOPE_PROCESS
该线程与同一进程中的所有其他线程争用资源,这些线程也是使用PTHREAD_SCOPE_PROCESS竞争范围创建的。 PTHREAD_SCOPE_PROCESS线程根据其调度策略和优先级相对于进程中的其他线程进行调度。 POSIX.1尚未说明这些线程如何与系统上其他进程中的其他线程或与同一进程中的其他线程(使用PTHREAD_SCOPE_SYSTEM争用范围创建)竞争。

POSIX.1要求实现至少支持这些争用范围之一。 Linux支持PTHREAD_SCOPE_SYSTEM,但不支持PTHREAD_SCOPE_PROCESS。

然后,在支持多个争用范围的系统上,为了使pthread_attr_setscope()进行的参数设置在调用pthread_create(3)时生效,调用者必须使用pthread_attr_setinheritsched(3)来设置属性对象的Inherited-Scheduler属性attr到PTHREAD_EXPLICIT_SCHED。

pthread_attr_getscope()函数在范围指向的缓冲区中返回attr所引用的线程属性对象的竞争范围属性。

错误说明

pthread_attr_setscope()可能因以下错误而失败:

EINVAL
在范围中指定了无效的值。
ENOTSUP
范围指定值为PTHREAD_SCOPE_PROCESS,Linux上不支持。
PTHREAD_ATTR_SETSCOPE - Linux手册页

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

出版信息

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

属性

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

InterfaceAttributeValue
pthread_attr_setscope(),pthread_attr_getscope()Thread safetyMT-Safe

语法

#include <pthread.h>

int pthread_attr_setscope(pthread_attr_t *attr, int scope);
int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);

Compile and link with -pthread.

备注

PTHREAD_SCOPE_SYSTEM竞争作用域通常指示用户空间线程直接绑定到单个内核调度实体。在Linux中,过时的LinuxThreads实现和现代NPTL实现都是这种情况,它们都是1:1线程实现。

POSIX.1指定默认争用范围是实现定义的。

返回值

成功时,这些函数返回0;否则,返回0。错误时,它们返回非零错误号。

遵循规范

POSIX.1-2001,POSIX.1-2008。

日期:2019-08-20 18:01:01 来源:oir作者:oir