Встроенный std :: mutex в заголовочном файле - PullRequest
2 голосов
/ 03 июля 2019

Я использую глобальный std::mutex в разных файлах cpp.

Можно ли объявить его в заголовочном файле как inline?

inline std::mutex mtx;

mtx построен таким образом?

Должна ли она быть инициализирована явно? Как в:

inline std::mutex mtx = {};

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

В документации по ключевому слову inline, применяемому к переменной (C ++ 17) (https://en.cppreference.com/w/cpp/language/inline), указано, что

2) It has the same address in every translation unit.

и

If an inline function or variable (since C++17) with external linkage is defined differently in different translation units, the behavior is undefined. 

Из этих предложений я понимаю, что мьютекс на самом деле будет уникальным и правильно инициализирован (если используется единственный предложенный заголовок)

2 голосов
/ 03 июля 2019

В C ++ 17 и выше можно и правильно объявить mtx как inline.Это позволяет вам иметь одинаковую переменную, определенную во всех единицах перевода, в которых она находится.

Должна ли она быть инициализирована явно?Как в:

inline std::mutex mtx = {};

Это не нужно.std::mutex является конструируемым по умолчанию, поэтому inline std::mutex mtx; - это все, что вам нужно.


Прежде чем иметь встроенные переменные, вам нужно иметь файл заголовка с

extern std::mutex mtx;

в нем, а затем в одном файле cpp есть

std::mutex mtx;

, чтобы фактически обеспечить одно определение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...