c++ - cpp 主体线程的局部函数是否安全?如果是这样,从中调用静态函数呢?

标签 c++ multithreading local static-methods

自从我引入第二个工作线程后,我遇到了很多多线程错误。这些问题很小,很难追踪。我的最新迹象表明

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/

相关文章:

java - 检查线程是否正在 sleep 总是返回 true

java - 为什么多线程版本与单线程版本花费相同的时间?

python 局部作用域

javascript - 如何更新 localStorage 项目?

c++ - 在 arduino 上的类中使用 LiquidCrystal_I2C

c++ - 使用 40 个不同的 'identities' Vs 运行相同的程序。运行程序的 40 个实例。优点和缺点?

c++ - QT如何实现自己的内存查看器

c# - 第二次调用 NetworkStream BeginRead() 大量资源争用

c++ - 什么标题包含 HR 功能定义? ( window 编程)

html - 为什么我的代码可以在 jsFiddle 上运行,但不能在本地运行