如何确定POSIX函数是否可重入?

时间:2013-12-22 18:55:51

标签: posix reentrancy

在编写目录迭代器时,我发现readdir函数不可重入。 readdir_r函数似乎是的重入版本,但我不知道如何确认这一点。虽然readdir明确标记为不可重入,但readdir_r没有提及。

有没有办法检查特定POSIX函数的重入?如何检查POSIX函数的重入?

1 个答案:

答案 0 :(得分: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了。


术语 reentrancy 是单线程环境中的遗留术语。无论如何,POSIX.1c假设多线程环境,它默默地假设从其他线程案例重新进入。