bindprocessor 子例程

用途

将内核线程绑定到处理器。

标准 C 库 (libc.a)

语法

#include <sys/processor.h>
int bindprocessor (What, Who, Where)
int What;
int Who;
cpu_t Where;

描述

bindprocessor 子例程将单个内核线程或进程中的所有内核线程绑定到处理器,从而强制将绑定的线程调度为在该处理器上运行。 重要的是要理解进程本身不能被绑定,而是它的内核线程可被绑定。 一旦内核线程被绑定,它们总是被调度为在所选的处理器上运行,直到它们之后被取消绑定。 创建了新的线程后,它与创建程序具有相同的绑定属性。 此应用于由 fork 子例程创建的新进程中的初始线程:新的线程继承了被称为 fork 的线程的绑定属性。 当调用 exec 子例程时,线程属性保持不变。

如果目标进程具有 资源连接,那么 bindprocessor 子例程将失败。

使用处理器绑定的程序应该变为意识到动态逻辑分区(DLPAR)。

参数

描述
What 指定进程或线程是否与处理器绑定。 What 参数可以采用下列其中一个值:
BINDPROCESS
进程正在与处理器绑定。
BINDTHREAD
正在将线程绑定到处理器。
指示进程或线程标识 (适用于 What 参数) ,指定要绑定到处理器的进程或线程。
WHERE 如果 Where 参数是绑定 CPU 标识,那么它指定要将进程或线程绑定到的处理器。 值 PROCESSOR_CLASS_ANY 将取消绑定指定的进程或线程,然后该进程或线程将能够在任何处理器上运行。

sysconf 子例程可用于检索有关系统中联机处理器数的信息。

返回值

成功完成时, bindprocessor 子例程返回 0。 否则,返回值为-1,并设置errno全局变量来指示错误。

错误代码

如果下列其中一项为真,那么 bindprocessor 子例程不成功:

描述
EINVAL What 参数无效,或者 Where 参数指示无效处理器号或当前不可用的处理器类。
ESRCH 指定的进程或线程不存在。
EPERM 调用者没有 root 用户权限,并且 who 参数指定进程或属于进程的线程,该进程的实际或有效用户标识与调用进程的实际或有效用户标识不同。 目标进程具有 资源连接