我想在主线程上初始化一些静态数据。如果功能有副作用,功能可以优化吗?
int32_t GetFoo(ptime t)
{
static HugeBarData data;
return data.Baz(t);
}
int main()
{
GetFoo(); // Avoid data race on static field.
// But will it be optimized away as unnecessary?
// Spawn threads. Call 'GetFoo' on the threads.
}
如果编译器可能决定删除它,我该如何强制它停留在那里?
我对编写编译器的人员足够聪明,不会因为抛弃了他们的返回值而抛弃带有副作用的函数调用而持谨慎乐观的态度。 – meagar
我想欣赏标准的一些相关部分。 – Sam
如果您的目的是为了避免竞争条件(如源代码注释所述),则不需要首次调用。 C++ 11保证本地静态变量初始化没有竞争条件(标准的以前版本没有关于线程)。 – Eugene