【发布时间】:2013-08-16 19:07:50
【问题描述】:
在 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 创建此类的新实例来解决它,创建它们调用工厂类?
【问题讨论】:
-
定义“正常工作”。
-
@Casey:正如我在底部所说的那样,在其他线程中创建的类的实例,或者在 DLL 中的函数中创建的类的实例仍然共享相同的值吗?
标签: multithreading dll c++11 static-members