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)」。

參數

表 1. 參數
項目 說明
什麼 指定處理程序或執行緒是否連結至處理器。 What 參數可以採用下列其中一個值:
BINDPROCESS
正在將處理程序連結至處理器。
BINDTHREAD
執行緒正在連結至處理器。
指出處理程序或執行緒 ID (適用於 What 參數) ,指定要連結至處理器的處理程序或執行緒。
何處 如果 Where 參數是連結 CPU ID ,則會指定處理程序或執行緒要連結至的處理器。 PROCESSOR_CLASS_ANY 值會取消連結指定的處理程序或執行緒,然後可以在任何處理器上執行。

sysconf 子常式可用來擷取系統中線上處理器數目的相關資訊。

回覆值

順利完成時, bindprocessor 子常式會傳回 0。 否則,會傳回值 -1 ,並設定 errno 廣域變數以指出錯誤。

錯誤碼

如果下列其中一項為真,則 bindprocessor 子常式不成功:

表 2. 錯誤碼
項目 說明
EINVAL What 參數無效,或 Where 參數指出處理器號碼無效,或目前無法使用的處理器類別。
ESRCH 指定的處理程序或執行緒不存在。
EPERM 呼叫者沒有 root 使用者權限,且 Who 參數指定處理程序或屬於處理程序的執行緒,具有不同於呼叫處理程序的實際或有效使用者 ID。 目標程序具有 資源附件