【发布时间】:2013-12-22 18:55:50
【问题描述】:
在编写目录迭代器时,我发现readdir 函数不可重入。 readdir_r 函数 似乎 的可重入版本,但我不知道如何确认。虽然readdir 被明确标记为不可重入,但没有提及readdir_r。
有没有办法检查特定 POSIX 函数的重入性?如何检查 POSIX 函数的可重入性?
【问题讨论】:
标签: posix reentrancy
在编写目录迭代器时,我发现readdir 函数不可重入。 readdir_r 函数 似乎 的可重入版本,但我不知道如何确认。虽然readdir 被明确标记为不可重入,但没有提及readdir_r。
有没有办法检查特定 POSIX 函数的重入性?如何检查 POSIX 函数的可重入性?
【问题讨论】:
标签: posix reentrancy
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了。
reentrancy 一词是来自单线程环境的遗留术语。无论如何,POSIX.1c 假定是多线程环境,它默默地假定 从其他线程重新进入 的情况。
【讨论】: