【问题标题】:How to determine whether a POSIX function is re-entrant or not?如何判断一个 POSIX 函数是否可重入?
【发布时间】:2013-12-22 18:55:50
【问题描述】:

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

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

【问题讨论】:

    标签: posix reentrancy


    【解决方案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 假定是多线程环境,它默默地假定 从其他线程重新进入 的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2021-11-25
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      相关资源
      最近更新 更多