gcc -D_REENTRANT

在使用多线程函数时,我们经常使用编译器选项-lpthread-D_REENTRANT,前者告诉链接器链接库文件libpthread.so,对于后者,gcc使用-D选项定义宏_REENTRANT的值为1,在 _POSIX_C_SOURCE宏被定义为199506L时该宏与_THREAD_SAFE宏作用相同,都是使用线程安全(即可重入)版本的C库函数(如gethostbyname函数),以下是/usr/include/features.h头文件中的例子:

#if defined _REENTRANT || defined _THREAD_SAFE
# define __USE_REENTRANT    1
#endif

_REENTRANT宏会做以下工作:
1.对部分函数重新定义它们的可重入版本,可重入版本的函数名以_r结尾,如gethostbyname函数的可重入版本为gethostbyname_r。

2.头文件stdio.h中原来以宏形式实现的一些函数将变成可重入函数。

3.头文件errno.h中的变量errno会变为函数调用,以便以线程安全的方式获取每个线程的errno值。

我们也可以使用-pthread选项,它可以设置支持多线程的所有链接器和编译器选项,在linux x86上,它与-lpthread-D_REENTRANT两者一起使用时作用相同,在其他平台则不一定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值