此问题已在C ++ 98上下文中提出,并在该上下文中得到了回答,但没有明确说明C ++ 11
const some_type& create_const_thingy()
{
lock my_lock(some_mutex);
static const some_type the_const_thingy;
return the_const_thingy;
}
void use_const_thingy()
{
static const some_type& the_const_thingy = create_const_thingy();
// use the_const_thingy
}
这种初始化模式是否可以确保:
create_const_thingy
仅被调用一次提前致谢!
答案 0 :(得分:8)
从C ++ 11开始,所有静态局部变量都保证只能以线程安全的方式初始化一次。
根据cppreference:
如果多个线程尝试初始化相同的静态本地 并发变量,初始化恰好发生一次(类似 可以使用
std::call_once
)获取任意函数的行为。 注意:此功能的常规实现使用的变体 双重检查锁定模式,减少运行时开销 已经初始化的局部静态到单个非原子布尔值 比较。
所以,对于你的问题: