【问题标题】:Is there a way to use errno safely in a multi-threaded application? [duplicate]有没有办法在多线程应用程序中安全地使用 errno? [复制]
【发布时间】:2010-10-01 18:37:56
【问题描述】:

如果您正在编写一个使用系统/库调用的多线程应用程序,该调用利用 errno 来指示错误类型,那么是否有一种安全的方式来使用 errno?如果没有,是否有其他方式来指示发生的错误类型,而不仅仅是发生了错误?

【问题讨论】:

    标签: c errno


    【解决方案1】:

    如果您的标准库支持多线程,那么它可能有一个 #defineerrno 更改为返回线程本地错误返回值的函数调用。但是,要使用它,您通常必须包含<errno.h>,而不是依赖extern 声明。

    我发现一篇文章 Thread-safety and POSIX.1 解决了这个问题。

    【讨论】:

    • 谢谢!快速检查 /usr/include/bits/errno.h 确认 errno 在我的 Ubundu 机器上使用线程时确实被定义为每个线程。
    【解决方案2】:

    man errno 说:

    errno 由 ISO C 标准定义 成为类型的可修改左值 int,并且不能显式 宣布; errno 可能是一个宏。错误号 是线程本地的;将其设置为一个 线程不影响其值 在任何其他线程中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多