2012-02-29 68 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爲您的平臺選擇默認值。