静态变量的值是否正确地跨线程边界传递?DLL边界呢



在c++11中,类中的静态成员变量是否能跨线程边界正常工作?DLL边界呢?

这是一个粗略的课堂剪辑,让我不禁要问:

class IndexedEvent
{
public:
    //constructor that is used the very first time an 
    //instance of this class is constructed
    IndexedEvent(Event* ev, int res):point(ev),resolution(res){calculateIndex();}
    //constructor to be used every time after that
    IndexedEvent(Event* ev):point(ev){calculateIndex();}
    ...some more member functions...
private:
    ...some more member functions...
    static int resolution;
    Event* point;
    Index calcIndex;
}

如果我在程序执行的一开始就在中设置解析,其他线程是否能够创建正确设置了该值的IndexedEvent实例?导入的dll中的函数是否能够创建正确设置分辨率的实例?

如果这不起作用,或者由于需要跳过的障碍而不可行,是否可以通过为IndexedEvent创建一个工厂类来解决这个问题,而不是通过运算符new创建这个类的新实例,而是通过调用工厂类来创建它们?

所有线程的静态变量都将位于同一地址。

我建议将静态变量放在DLL中的静态函数中。静态函数返回对静态变量的引用。通过这种方式,您可以控制它的初始化,其他模块也可以轻松访问它。

使用thread_local为每个线程提供变量的本地存储。

最新更新