Как C++17 обрабатывает поточно-безопасную инициализацию встроенных статических элементов данных в нескольких единицах трC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как C++17 обрабатывает поточно-безопасную инициализацию встроенных статических элементов данных в нескольких единицах тр

Сообщение Anonymous »

Я изучал встроенные статические переменные в C++17 и их инициализацию в нескольких единицах трансляции. Я понимаю, что встроенные статические переменные вводятся для поддержания единого экземпляра в программе, обеспечивая при этом потокобезопасную инициализацию. Однако, когда вы используете встроенные статические переменные, компилятор, похоже, добавляет проверку, чтобы гарантировать, что переменная инициализируется потокобезопасным способом. Это необходимо, поскольку компилятор не может предсказать, какая единица трансляции выполнит инициализацию первой, из-за включения заголовочного файла в несколько единиц трансляции.
Из того, что я понял, кажется, это своего рода защитный механизм (как показано в ассемблерном коде, указанном ниже), который предотвращает множественную инициализацию.
Итак, мои вопросы:
1 ) В каждой единице трансляции имеется ли защита потоков для инициализации во время во время выполнения?
2)После инициализации переменной правильно ли, что никакие примитивы синхронизации не нужны, когда к ней обращаются/используют ее во всей программе?
https://godbolt.org/z/hhWoK7Y3r
#include
#include
class Thing
{
public:

inline const static std::string name{"Miko"};
};


Подробнее здесь: https://stackoverflow.com/questions/793 ... -members-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»