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
两者一起使用时作用相同,在其他平台则不一定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)