2012-02-29 94 views
0

http://sunsite.ualberta.ca/Documentation/Gnu/libstdc++-2.90.8/html/configopts.html,该选项有解释,它的意思是,STL是线程安全的,并且是默认情况下它呀?当编译gcc/g ++/libstdC++时,--enable-threads = LIB是什么意思?

+2

当我读到的链接的文本,它没有任何关系线程安全的,但什么底层的线程系统应该使用。 – 2012-02-29 07:05:32

+1

和上面一样,我会保持独立,假设标准对象是多读,单写。如果多线程安装了一些std :: mutexs。 – 111111 2012-02-29 15:04:01

回答

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库实现遵循由SGI的STL实现使用的线程安全的定义:http://www.sgi.com/tech/stl/thread_safety.html

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