std::thread::hardware_concurrency和静态初始化
std::thread::hardware_concurrency and static initialization
这个全局函数可能会遭遇静态初始化失败吗?
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();
将被评估为
相关文章:
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 静态初始化的反义词是什么?
- 在静态初始化期间运行代码
- 结构数组的嵌入式C++静态初始化
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 constexpr 和 std::array 进行静态初始化来替换动态初始化的 std::vector 的闰年
- MSVC 2017 在单个翻译单元中违反静态初始化顺序
- VC++6 线程安全静态初始化
- 具有必要副作用的静态初始化被优化掉了
- 未使用全球的静态初始化器
- w/ w/结构带char缓冲液的静态初始化[]
- 静态初始化的对象不能放在块中尝试
- 功能指针的静态初始化
- lambda(或函数)C++中的静态初始化
- C++静态初始化顺序:添加到映射中
- 复杂类型数组的静态初始化
- C++ - 在派生类中静态初始化受基类保护的成员变量
- 静态初始化插件工厂
- 静态初始化包含功能指针的对象的constexpr std ::数组
- 找出静态初始化是否结束