有没有办法在多线程应用程序中安全地使用 errno? [复制]

Posted

技术标签:

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

如果您正在编写一个使用系统/库调用的多线程应用程序,该调用利用 errno 来指示错误类型,那么是否有一种安全的方式来使用 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 可能是一个宏。错误号 是线程本地的;将其设置为一个 线程不影响其值 在任何其他线程中。

【讨论】:

以上是关于有没有办法在多线程应用程序中安全地使用 errno? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

安全地使用 auto_ptr 交换对象而不锁定在多线程环境中?

jsch的sftp在多线程下的问题及处理办法

errno线程安全性

GSubprocess 可以安全地在线程中使用吗?

在多线程系统中使用静态 java.sql.Connection 实例是不是安全?

每个线程一个 DAO 还是线程安全 DAO?