что означает --enable-threads = LIB при компиляции gcc / g ++ / libstdc ++? - PullRequest
0 голосов
/ 29 февраля 2012

http://sunsite.ualberta.ca/Documentation/Gnu/libstdc++-2.90.8/html/configopts.html, там объясняется опция, означает ли это, что stl является потокобезопасным, и так ли это по умолчанию?

1 Ответ

3 голосов
/ 19 мая 2012

Прочитайте невероятное руководство и прочитайте последнюю версию на официальном сайте 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 выбрать значение по умолчанию для вашей платформы.

...