我的问题是对this question的扩展。
在最初的问题中,OP询问是否需要保护静态函数的局部变量以防止数据争用。答案是每个线程都有自己的堆栈帧。假设同样适用于具有静态函数的嵌套类是否安全?
// Function called by several threads
int someFunc(int a, int b)
{
struct nestedStruct
{
static int do_something(int& a, int& b)
{
a = rand();
b = rand();
return a + b;
}
};
return nestedStruct::do_something(a, b);
}
答案 0 :(得分:2)
外部someFunc
有自己的堆栈框架,所以如果rand
是线程安全的(我不确定它是不是),那么外部函数和嵌套静态函数都可以。