如果C++的类中含有静态成员函数,那么该如何考虑其线程安全性呢?
见下面实例:
class CData { public: static void func() { int a; static int b; } int c; static int d; }; int main() { CData::func(); }
Now variable 'a' is local to each call of func(). If two threads call func() at the same time, they get different versions of 'a'.
'b' is a static local. The value persists between different calls of func(). If two threads call func() at the same time, they access the same version of 'b' so they might need to do synchronisation.
'c' is an instance variable; it is attached to a particular instantiation of CData. func() cannot access 'c', except with a trick I'll show below.
'd' is a static variable. There is one instance of 'd' shared between all uses of class CData so synchronisation may be necessary. It can be used easily from the static function func().