静态成员函数和线程安全性

Ton*_*ion 10 c++ multithreading static-functions

在C++中,当你在静态成员函数中有局部变量时,它是否意味着那些局部变量也是隐式静态的,还是它们真的是本地的?

例:

static void myClass::somefunc(int someint)
{

int myint = someint;  // is myint really a local variable or does it change due to the static qualifier at function level?


}
Run Code Online (Sandbox Code Playgroud)

此外,运行此函数的线程池中的不同线程是否需要通过锁保护myint?假设传递给它的所有值都不同并且彼此没有关系.

编辑:Thanx的答案.现在如果我传入了一个boost::shared_ptr<T>,知道这个对象不会被另一个线程同时使用?(不确定是否可以真正保证,或者你能吗?)

我猜一个原始的ptr传入,如果它被全部使用,需要一些保护吗?

sha*_*oth 9

它们是本地的,除非你声明它们static- 函数的每个invokation都有自己的变量副本,你不需要保护它们.

  • @ T33C:他想知道哪里有"静态"本地? (6认同)
  • @ T33C":另一个线程如何获得对局部变量的并发访问? (2认同)