我跑進造成這種行爲的錯誤:通過的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