我是否需要在编译时添加 _REENTRANT 宏以使我的 errno 线程安全?

2024-04-29

我是否需要在编译时添加 _REENTRANT 宏以使我的 errno 线程安全?

如果不是,是所有版本的 gcc/linux/solaris 都是这样还是某些旧版本需要?

我最近测试了一段未使用 _REENTRANT 的代码,发现 errno 在多线程环境中以未定义的方式表现?但是,添加 _REENTRANT 后一切正常。环境是Solaris。

但是,讨论here https://stackoverflow.com/questions/1694164/is-errno-thread-safe似乎没有说必须添加_REENTRANT。我有点困惑。

另外,除了 _REENTRANT 之外,我是否应该添加任何其他选项或库以确保我的应用程序具有线程安全的 errno?


在实践中,_REENTRANT当线程被认为是现有实现之上的扩展时,它是遗留垃圾,并且标准库的默认行为不是线程安全的。现代实现不需要它,而且它从来都不是标准的。 (请注意,这也是一个用词不当,因为可重入的 and 线程安全具有完全不同的含义。)

理论上,POSIX 要求您通过以下方式查询和使用以下配置选项getconf如果您正在编译线程程序:

  • POSIX_V7_THREADS_CFLAGS
  • POSIX_V7_THREADS_LDFLAGS

另一方面,gcc 有自己冲突的“可移植”方式来请求线程支持:-pthread选项,通常添加线程工作所需的任何预定义宏和库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我是否需要在编译时添加 _REENTRANT 宏以使我的 errno 线程安全? 的相关文章