I am using a global std::mutex in different cpp files.
Is it okay to declare it in a header file as inline?
inline std::mutex mtx;
Is mtx constructed this way?
Should it be initialized explicitly? As in:
inline std::mutex mtx = {};
I am using a global std::mutex in different cpp files.
Is it okay to declare it in a header file as inline?
inline std::mutex mtx;
Is mtx constructed this way?
Should it be initialized explicitly? As in:
inline std::mutex mtx = {};
In C++17 and above it is okay and proper to declare mtx as inline. This allows you to have the same variable defined in all the translation units it is in.
Should it be initialized explicitly? As in:
inline std::mutex mtx = {};
That is not needed. std::mutex is default constructable so inline std::mutex mtx; is all you need.
Before we had inline variables what you would have to do is have a header file with
extern std::mutex mtx;
in it and then in a single cpp file have
std::mutex mtx;
in it to actually provide a single definition.
In the documentation on inline keyword applied to a variable (C++17)
(https://en.cppreference.com/w/cpp/language/inline)
it is stated that
2) It has the same address in every translation unit.
and
If an inline function or variable (since C++17) with external linkage is defined differently in different translation units, the behavior is undefined.
I understand from these sentences that the mutex will actually be unique and correctly initialised (if the only header suggested is used)