我跑进造成这种行为的错误:通过的std :: call_once的调用的函数调用将挂起:: once_flag
#include <mutex>
std::once_flag onceFlag;
void get() {
std::call_once(onceFlag, [](){ get(); });
}
int main(int argc, char* argv[]) {
get();
return 0;
}
的另一种方式把它将会是:
#include <mutex>
std::once_flag onceFlag;
int main(int argc, char* argv[]) {
std::call_once(onceFlag,
[](){
std::call_once(onceFlag,
[](){}
);
}
);
return 0;
}
据我在阅读cppreference这里(http://en.cppreference.com/w/cpp/thread/call_once),这是可以预料的,因为在第一次调用到std :: call_once的尚未执行完毕:
在上述 执行所选功能成功完成之前,组中没有调用返回,即 未通过异常退出。
为什么上述要求?在函数调用之前,不能设置once_flag,并且在抛出异常时重置?
简答:因为委员会决定应该。 – Caleth