在Linux程序设计第4版 12.3章节中说到:在编写多线程程序时,我们需要通过定义宏_REENTRANT来告诉编译器我们需要可重入功能,而这个宏定义必须位于程序中的任何#include语句之前。进行该宏定义后,我们能够以一种多线程安全的方式来访问一些函数或者一些值(如:stdio.h中的一些以宏形式实现的函数,errno.h中的变量errno)。
但是, 该_REENTRANT宏是必须的吗?在编译的时候可以省略它吗?
答案是可以的,在编译时使用-pthread等价于–D_REENTRANT –lpthread。
执行命令” g++ -dumpspecs”可以看出pthread和–lpthread的关系:
*cpp:
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
*lib:
%{pthread:-lpthread} %{shared:-lc} %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}
因此现在在大多数Makefile文件中可以看到使用-pthread而不是使用-D_REENTRANT –lpthread.