2._reentrant巨集
在乙個多執行緒程式裡,預設情況下,只有乙個errno變數供所有的執行緒共享。在乙個執行緒準備獲取剛才的錯誤**時,該變數很容易被另乙個執行緒中的函式呼叫所改變。類似的問題還存在於fputs之類的函式中,這些函式通常用乙個單獨的全域性性區域來快取輸出資料。
為解決這個問題,需要使用可重入的例程。可重入**可以被多次呼叫而仍然工作正常。編寫的多執行緒程式,通過定義巨集_reentrant來告訴編譯器我們需要可重入功能,這個巨集的定義必須出現於程式中的任何#include語句之前。
_reentrant為我們做三件事情,並且做的非常優雅:
(1)它會對部分函式重新定義它們的可安全重入的版本,這些函式名字一般不會發生改變,只是會在函式名後面新增_r字串,如函式名gethostbyname變成gethostbyname_r。
(2)stdio.h中原來以巨集的形式實現的一些函式將變成可安全重入函式。
(3)在error.h中定義的變數error現在將成為乙個函式呼叫,它能夠以一種安全的多執行緒方式來獲取真正的errno的值。
參考:linux多執行緒程式設計小結
D REENTRANT 巨集作用
2.reentrant巨集 在乙個多執行緒程式裡,預設情況下,只有乙個errno變數供所有的執行緒共享。在乙個執行緒準備獲取剛才的錯誤 時,該變數很容易被另乙個執行緒中的函式呼叫所改變。類似的問題還存在於fputs之類的函式中,這些函式通常用乙個單獨的全域性性區域來快取輸出資料。為解決這個問題,需要...
D REENTRANT編譯選項的作用
d reentrant巨集作用 reentrant巨集 在乙個多執行緒程式裡,預設情況下,只有乙個errno變數供所有的 執行緒共享。假設在乙個執行緒準備獲取剛才的錯誤 時,該變數很容易被另 外乙個執行緒中的函式呼叫所改變。類似的問題還存在於fputs之類的函式中 這些函式通常用乙個單獨的全域性性區...
C C 巨集 巨集的作用 副作用
基礎 巨集是預處理指令 巨集的本質是簡單的字串替換,預處理時進行巨集替換 可在定義巨集時要求它接收引數,巨集替換時會代入引數 巨集的名字不允許過載 巨集預處理 沒有能力處理遞迴呼叫。作用 看一段math.h中的巨集定義 if defined use math defines defined math...