c/c++ 多執行緒 std::once
阿新 • • 發佈:2018-11-06
多執行緒 std::once
轉自:https://blog.csdn.net/hengyunabc/article/details/33031465
std::once的特點:即使有多個執行緒要訪問同一個函式,只有一個執行緒會成功。
std::once的用途:當某個資料只有在初始化的時候需要執行緒安全的時候,使用std::once是最安全和恰當的做法。
注意:std::once_flag的生命週期一定要長於std::once的執行緒的宣告週期,所以一般把std::once_flag宣告為全域性變數。
例子:
#include <iostream> #include <thread> #include <mutex> std::once_flag flag; void do_once() { std::call_once(flag, [](){ std::cout << "Called once" << std::endl; }); } int main() { std::thread t1(do_once); std::thread t2(do_once); std::thread t3(do_once); std::thread t4(do_once); t1.join(); t2.join(); t3.join(); t4.join(); }
執行結果:do_once()函式只被呼叫了一次。