编译 gcc/g++/libstdc++ 时 --enable-threads=LIB 是什么意思?

shd*_*shd 1 c++ gcc stl g++

http://sunsite.ualberta.ca/Documentation/Gnu/libstdc++-2.90.8/html/configopts.html,该选项在那里进行了解释,这是否意味着stl是线程安全的,默认情况下是这样吗?

Jon*_*ely 5

阅读精彩的手册,并阅读 GCC 官方网站上的最新版本,而不是引用旧版本的 12 年前的文档副本!当前的文档--enable-threads位于http://gcc.gnu.org/install/configure.html,解释 libstdc++ 是否线程安全的文档位于http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_concurrency .html#manual.intro.using.concurrency.thread_safety

通过参考官方文档,您会得到更好的答案,而不是询问 SO,并希望您从真正知道自己在说什么的人那里得到答案。

1)你问的选项只影响GCC,所以它显然只影响GCC的标准库,它一般没有提到stl中的线程安全。

2) 大多数 C++03 库实现(包括 GCC)和所有 C++11 库实现都遵循 STL 的 SGI 实现所使用的线程安全定义:http ://www.sgi.com/tech/stl/线程安全.html

3)正如该文档中所解释的,如果您遵循不从多个线程访问对象的简单规则,GCC 的标准库始终是“线程安全的”,--enable-threads这不会影响这一点。它影响的是(如上面的评论中提到的)底层多线程 API,用于实现 libstdc++ 内部所需的内部互斥体和线程功能。在几乎所有平台上,唯一受支持的选项将是--enable-threads=single(相当于--disable-threads)或本机线程模型(例如,在 POSIX 平台上--enable-threads=posix、在 Windows 上--enable-threads=win32),因此您可能不想使用该选项,只需让 GCC 选择适合您平台的默认值即可。