1. 程式人生 > >C++11 std::call_once:保證函式在任何情況下只調用一次

C++11 std::call_once:保證函式在任何情況下只調用一次

std::call_once的作用是很簡單的, 就是保證函式或者一些程式碼段在併發或者多執行緒的情況下,始終只會被執行一次。比如一些init函式,多次呼叫可能導致各種奇怪問題。

給個例子:

#include <iostream>
#include <thread>
#include <mutex>
 
std::once_flag flag1;
 
void simple_do_once()
{
    std::call_once(flag1, [](){ std::cout << "Simple example: called once\n
"; }); } int main() { std::thread st1(simple_do_once); std::thread st2(simple_do_once); std::thread st3(simple_do_once); std::thread st4(simple_do_once); st1.join(); st2.join(); st3.join(); st4.join(); }

 

Output:

Simple example: called once