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



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

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

这里有一个用于重新进入的POSIX.1c策略。

这是我的总结。

  • 默认情况下,所有函数都是可重入的
  • 由于各种原因,某些功能无法重新进入。他们将有分离的重新进入版本。它们也有明确的标记
  • 有些函数对可重入性意味着巨大的性能损失。它们将通过牺牲安全性来分离非重入版本,以实现单线程性能。它们也有明确的标记

这里是另一个警告声明。

引自正文。

线程编程所需的头文件

#define _REENTRANT
#include <pthread.h>
#include <sched.h>

_REENTRANT表示应该使用标准库的可重入(即线程安全)版本。

头文件pthread.h定义了POSIX线程API。

头文件sched.h定义了进程和线程调度API。在这里解释的功能中,只有sched_yield()需要它


无论如何,还有一种说法认为这些步骤不再需要了:是否需要我在编译时添加_REENTRANT宏以确保errno线程的安全


术语可重入性是单线程环境中的遗留术语。无论如何,POSIX.1c假定多线程环境,并且它静默地假定从其他线程情况重新进入。

最新更新