В C ++ 17 и выше можно и правильно объявить mtx
как inline
.Это позволяет вам иметь одинаковую переменную, определенную во всех единицах перевода, в которых она находится.
Должна ли она быть инициализирована явно?Как в:
inline std::mutex mtx = {};
Это не нужно.std::mutex
является конструируемым по умолчанию, поэтому inline std::mutex mtx;
- это все, что вам нужно.
Прежде чем иметь встроенные переменные, вам нужно иметь файл заголовка с
extern std::mutex mtx;
в нем, а затем в одном файле cpp есть
std::mutex mtx;
, чтобы фактически обеспечить одно определение.