为了保证在多线程环境中某个函数仅会被调用一次,可以使用 std::call_once 保证函数只能被调用一次。
使用 std::call_once 时需要一个 std::once_flag 做为 call_once 的入参。
std::once_flag onceFlag;
void doOnce()
{
std::call_once(onceFlag, []() {
std::cout << "Called one time" << std::endl;
}
);
}
int main()
{
std::vector<std::thread> thVec(10);
for (int i = 0; i < 10; ++i)
{
thVec[i] = std::move(std::thread(doOnce));
}
for (auto& th : thVec)
{
th.join();
}
}
/*
// ---------------------------------------------------------
// output
// ---------------------------------------------------------
Called one time
*/
本文介绍了C++11中std::call_once的功能,用于在多线程环境下保证某个函数只被调用一次。通过示例展示了如何使用std::once_flag配合std::call_once实现线程安全的初始化操作,确保在并发环境中函数不会被重复执行。
572

被折叠的 条评论
为什么被折叠?



