C++11: std::call_once和std::one_flag
2016-05-21 00:00
579 查看
有时候我们需要的变量(variable)容器(container)只需要初始化一次,以容器(containter)为例子,可能只是需要向其中注入一次元素.
只打C++11开始标准库提供了std::call_once()和std::once_flag的组合可以帮助我们做到这一点.
demo1:
demo2:
只打C++11开始标准库提供了std::call_once()和std::once_flag的组合可以帮助我们做到这一点.
demo1:
#include <iostream> #include <thread> #include <mutex> #include <vector> std::vector<int> vec; std::mutex mutex; std::once_flag flag; static int val = 0; void initialized_vec(std::vector<int>& vec) { for (int i = 0; i < 10; ++i) { vec.push_back(val++); } } void print_vec() { std::call_once(flag, initialized_vec, vec); std::lock_guard<std::mutex> auto_lock(mutex); for (const int& number : vec) { std::cout << number << " "; } std::cout << std::endl; } int main() { std::thread threads[5]; for (int i = 0; i < 5; ++i) { threads[i] = std::thread(print_vec); } for (std::thread& ref_thread : threads) { ref_thread.join(); } return 0; }
demo2:
#include <iostream> #include <thread> #include <mutex> #include "Singleton.h" void function(int& number) { number = 20; } int main() { int number{ 0 }; std::once_flag onceFlag; std::call_once(onceFlag, function, number); std::cout << number << std::endl; //20! ref number return 0; }
相关文章推荐
- C++ STL 基础及应用(1) STL历史、组成和使用方法
- c++作业6
- C++第六次作业
- C动态字符串,动态开辟内存空间相关 malloc realloc 用法
- 【LeetCode-190】 Reverse Bits(C++)
- C++ STL 基础及应用(0) 目录
- C++第六次实验——数组操作
- 【New AKOJ】1016: 【C语言训练】委派任务*
- c++作业6
- 小sugar呀——康托展开与逆展开
- C/C++中new关键字是否加括号的区别
- c++第六次上机作业
- c++第6次作业
- C++第六次实验-矩阵求和
- C++设计模式浅识装饰模式
- c语言实例之矩阵转置
- c++中的static
- c++实验6-数组操作
- 【算法总结系列-2】有趣的排序-冒泡排序-C++演示
- 细说new与malloc的10点区别