自从我引入第二个工作线程后,我遇到了很多多线程错误。这些问题很小,很难追踪。我的最新迹象表明
class MyOtherClass {
static String defaultName;
static String getDefaultName() {return defaultName;}
}
正在被以下人员使用:
result plainLocalFunction() {
result r = E_SUCCESS;
String fallbackName = MyOtherClass::getDefaultName();
//Do other stuff with locals.
return r;
}
我一直在调试这个,我只能假设 plainLocalFunction
在线程之间共享它的局部变量,或者对 getDefaultName()
的调用涉及写入到不是线程安全的静态变量?感谢您的宝贵时间。
最佳答案
函数内的静态变量会使您的函数不可重入且线程不安全。
如果函数中只有局部变量,那么每个线程堆栈都会有自己的这些变量拷贝,并且函数将是线程安全的。
关于c++ - cpp 主体线程的局部函数是否安全?如果是这样,从中调用静态函数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9066285/