2013-12-22 20 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假设多线程环境,并且默认假设从其他线程重新进入。