2013-12-22 22 views
1

在編寫目錄迭代器時,我發現readdir函數不可重入。 readdir_r函數似乎重入版本,但我不知道如何確認這一點。雖然readdir明確標記爲不可重入,但沒有提及readdir_r如何確定POSIX函數是否可重入?

有沒有辦法檢查特定POSIX函數的重入性?如何檢查POSIX函數的重入性?

回答

1

Here is a POSIX.1c policy for re-entrancy.

這是我的總結。

  • 默認情況下,所有功能都是可重入的。
  • 由於各種原因,某些功能不能重入。他們將有分離的重入版本。它們也被明確標記。
  • 某些功能意味着巨大的性能損失重新進入。他們將通過犧牲安全性爲單線程性能分離不可重入版本。它們也被明確標記。

Here's another caveat claim.

從文中引用。

頭文件你需要線程編程

#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假設多線程環境,並且默認假設從其他線程重新進入。