std::call_once 简单用法
std::call_once 是一个 c++11 标准库函数,用于保证多线程环境下某个函数只被调用一次。
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <mutex>
#include <thread>
static std::once_flag flag;
void Test()
{
std::call_once(flag, []() {
// 该代码片段只会被调到一次
std::cout << "I am Test" << std::endl;
}
);
}
int main()
{
std::thread t1([&]() {
while (true)
{
Test();
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
std::thread t2([&]() {
while (true)
{
Test();
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
std::thread t3([&]() {
while (true)
{
Test();
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
t1.join();
t2.join();
t3.join();
return 0;
}
本文由作者按照 CC BY 4.0 进行授权