Применяются ли какие-либо гарантии безопасности потоков C++11 к сторонним библиотекам потоков, скомпилированным/соединенным с C++11?

C++11 предлагает такие функции, как потокобезопасная инициализация статических переменных, и, цитируя этот вопрос, мы скажем, например:

Logger& g_logger() {
    static Logger lg;
    return lg;
}

Итак, якобы (?) это true независимо от того, включал ли модуль, скомпилированный с помощью компилятора C++11, заголовки потоков или порождал какие-либо потоки в своем теле. Вам предлагается гарантия, даже если он был связан с другим модулем, который использовал потоки C++11 и вызывал функцию.

Но что, если ваш «другой модуль», который вызывает этот код, использует потоки не C++11, а что-то вроде QThreadQt. В таком случае атомарная инициализация статики выходит за рамки способности С++ 11 дать такую ​​гарантию? Или сам факт того, что модуль был скомпилирован с помощью C++11, а затем слинкован с другим кодом C++11, означает, что вы все равно получите гарантию?

Кто-нибудь знает хороший справочник, где рассматриваются подобные вопросы?

8
задан Community 23 May 2017 в 12:22
поделиться