
【計】 reentrant procedure
【計】 reentrant control state
agree with; enter; income; join
course; procedure; process
【計】 PROC
【化】 process
【醫】 course; process
【經】 process
在計算機科學中,"可重入過程"(Reentrant Process,也稱Reentrant Procedure)指一種能夠被多個執行線程或中斷服務例程同時安全調用的代碼模塊。其核心特性在于:執行過程中不依賴或修改共享的靜态數據或全局變量,确保每次進入時具備獨立運行環境。
數據隔離性
可重入過程的内部狀态完全由調用者提供(如通過參數傳遞),避免使用全局變量或靜态存儲區。這一特性使其在多線程調度或嵌套調用時不會産生數據競争,符合IEEE POSIX标準對線程安全函數的要求。
行為确定性
每次調用僅通過傳入參數和局部變量計算結果,不修改自身代碼或外部硬件狀态。例如在信號處理函數中,使用可重入函數(如memcpy
)可避免因調用非可重入函數(如malloc
)導緻的内存管理沖突。
調用鍊安全
可重入過程調用的所有子過程必須同為可重入函數,形成完整的可重入調用鍊。這一原則在實時操作系統(RTOS)的任務調度中尤為重要,IBM PowerPC架構文檔明确指出該特性是中斷服務例程設計的強制要求。
_reentrant
宏标記可重入函數,确保進程調度時不會引發競态條件strtok_r
作為strtok
的可重入版本,通過引入上下文參數消除全局狀态依賴。可重入過程(Reentrant Process)是計算機科學中的一個重要概念,主要應用于多線程、中斷處理等并發場景。其核心特征是:在任意時刻,該過程的代碼可以被中斷并再次進入(被其他調用者或同一調用者的不同執行路徑重新調用),而不會導緻數據混亂或邏輯錯誤。
無狀态性
可重入過程不依賴全局變量、靜态變量或共享資源(如硬件寄存器),所有操作僅通過參數傳遞和局部變量完成。這使得每次調用都具備獨立性,不會因多次調用産生數據競争。例如:
// 可重入函數示例:僅使用參數和局部變量
int add(int a, int b) {
return a + b;// 無全局依賴
}
不可變性與原子性
若需訪問共享資源,必須通過原子操作或同步機制(如信號量、互斥鎖)保證操作的完整性,避免部分修改導緻狀态不一緻。
遞歸支持
可重入過程天然支持遞歸調用,因為每次調用棧的上下文獨立。例如階乘函數:
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n-1);// 遞歸調用不破壞前次調用狀态
}
// 不可重入函數:依賴靜态變量
int counter() {
static int count = 0;// 靜态變量導緻狀态共享
return ++count;
}
當多個線程同時調用counter()
時,輸出的值可能因競争條件而不可預測。
在形式化驗證中,可重入性可表示為: $$ forall p_1, p_2 in Process, forall t in Time,quad Execute(p_1, t) cap Execute(p_2, t) = emptyset $$ 即任意兩個進程$p_1$和$p_2$在時間$t$的執行上下文互不幹擾。
【别人正在浏覽】