编译gcc / g ++ / libstdc ++意味着什么--enable-threads = LIB?

时间:2012-02-29 06:52:45

标签: c++ gcc stl g++

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

1 个答案:

答案 0 :(得分:3)

阅读精彩的手册,并阅读官方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/thread_safety.html

3)正如文档中所解释的那样,如果遵循关于不从多个线程访问对象的简单规则,GCC的标准库总是“线程安全的”,--enable-threads不会影响它。它影响的是(如上面的注释中所述)底层多线程API,用于实现libstdc ++内部所需的内部互斥和线程功能。在几乎所有平台上,唯一受支持的选项将是--enable-threads=single(相当于--disable-threads)或本机线程模型(例如,在Windows上的POSIX平台--enable-threads=posix上{ {1}})所以您可能想要使用该选项,只需让GCC为您的平台选择默认值。