在编写目录迭代器时,我发现readdir
函数不可重入。 readdir_r
函数似乎重入版本,但我不知道如何确认这一点。虽然readdir
明确标记为不可重入,但没有提及readdir_r
。如何确定POSIX函数是否可重入?
有没有办法检查特定POSIX函数的重入性?如何检查POSIX函数的重入性?
在编写目录迭代器时,我发现readdir
函数不可重入。 readdir_r
函数似乎重入版本,但我不知道如何确认这一点。虽然readdir
明确标记为不可重入,但没有提及readdir_r
。如何确定POSIX函数是否可重入?
有没有办法检查特定POSIX函数的重入性?如何检查POSIX函数的重入性?
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
了。
术语重入是从单线程环境的传统术语。无论如何,POSIX.1c假设多线程环境,并且默认假设从其他线程重新进入。