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

Jay*_*Jay 7 c compiler-construction multithreading errno

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

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

我最近测试了一段没有使用_REENTRANT的代码,并发现errno在多线程环境中的未定义fahsion中运行?但是,在添加_REENTRANT后,一切正常.环境是Solaris.

但是,这里的讨论似乎并没有说必须添加_REENTRANT.我有点困惑.

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

R..*_*R.. 10

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

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

  • POSIX_V7_THREADS_CFLAGS
  • POSIX_V7_THREADS_LDFLAGS

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