在編寫目錄迭代器時,我發現readdir
函數不可重入。 readdir_r
函數似乎重入版本,但我不知道如何確認這一點。雖然readdir
明確標記爲不可重入,但沒有提及readdir_r
。如何確定POSIX函數是否可重入?
有沒有辦法檢查特定POSIX函數的重入性?如何檢查POSIX函數的重入性?
在編寫目錄迭代器時,我發現readdir
函數不可重入。 readdir_r
函數似乎重入版本,但我不知道如何確認這一點。雖然readdir
明確標記爲不可重入,但沒有提及readdir_r
。如何確定POSIX函數是否可重入?
有沒有辦法檢查特定POSIX函數的重入性?如何檢查POSIX函數的重入性?
Here is a POSIX.1c policy for re-entrancy.
這是我的總結。
從文中引用。
頭文件你需要線程編程
#define _REENTRANT #include <pthread.h> #include <sched.h>
_REENTRANT指示應使用標準程序庫的可重入(即線程安全的)版本。
頭文件pthread.h定義了POSIX線程API。
頭文件sched.h定義了進程和線程調度API。 在這裏解釋的功能中,只有
sched_yield()
需要它。
無論如何,有這些步驟都不再需要其他要求:Is it required for me to add a _REENTRANT macro during compile time to make my errno thread safe?看來我們並不需要定義_REENTRANT
了。
術語重入是從單線程環境的傳統術語。無論如何,POSIX.1c假設多線程環境,並且默認假設從其他線程重新進入。