I have a code in .cpp
namespapce A
{
namespace
{
static CMutex initMutex;
}
void init()
{
//code here
}
void uninit()
{
//code here
}
}
What is the different if I remove the static in the mutex and if there is a static? And what is the use of the static?
Thanks!
If mutex is static and if it would have been in the header and that header included in 2 cpp files(2 translational units), the lock applied by the code in first file will not be seen by the second file which is dangerous. This is because the 2 units has separate static of the mutex. In that case a global mutex is preferable.
If this is C++ then use RAII mechanism to manage mutex lock and unlock. THis is c++, where is the class? Encapsulate things into a class.
RAII example (basic one, things can be encapsulated into class):
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
You are Kind of mixing up C and C++. The keyword static
in C has the intention to narrow the scope of a variable down to the translation unit. You could define it globally in the translation unit, but it was not visible to other translation-units.
Bjarne Stroustrup recommends to use anonymous namespaces
in C++ instead of using static
like in C.
From this post it says
The C++ Standard reads in section 7.3.1.1 Unnamed namespaces, paragraph 2:
The use of the static keyword is deprecated when declaring objects
in a namespace scope, the unnamed-namespace provides a superior alternative.
Static only applies to names of objects, functions, and anonymous unions, not to type declarations.
static merely does two things:
makes a variable to exist for the entire life of a program (but this is global level, so anything here exist for the whole program life!)
makes a variable visible only in the translation unit it is declared (but this apply to whatever is in an anonymous namespace).
So, in fact, in this particular context, static does nothing.