std::thread::hardware_concurrency和静态初始化

std::thread::hardware_concurrency and static initialization

本文关键字:静态 初始化 concurrency thread hardware std      更新时间:2023-10-16

这个全局函数可能会遭遇静态初始化失败吗?

template <typename TFn>
void ParallelFor(int iIni,int iFin,TFn Fn)    
{
static const unsigned int NThread= std::thread::hardware_concurrency();
// ...    
}

这个全局函数可能会遭遇静态初始化失败吗?

不,不会。你很安全…:-)

引用C++标准草案(重点挖掘)。。。

$6.7:4:块作用域变量的动态初始化静态存储持续时间([basic.stc.static])或线程存储持续时间([basic.stc.thread])执行第一次控制通过其声明;考虑这样一个变量在其初始化完成时初始化如果初始化通过抛出异常退出,初始化为未完成,因此下次控件进入时将重试声明如果控件同时进入声明在初始化变量时,并发执行应等待初始化完成

另请参阅:静态局部变量

由于您的函数是一个函数模板template <typename TFn>,对于每个单独的实例化(TFn的替换),static const unsigned int NThread = std::thread::hardware_concurrency();将被评估为