1

在 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 创建工厂类而不是通过 operator new 创建此类的新实例来解决它,而是通过调用创建它们到工厂班?

4

1 回答 1

1

对于所有线程,静态变量将位于相同的地址。

我建议将静态变量放在 DLL 内的静态函数中。静态函数返回对静态变量的引用。这样你可以控制它的初始化并且其他模块可以很容易地访问它。

用于thread_local对每个线程的变量进行本地存储。

于 2013-08-16T20:35:07.177 回答