c++并发编程中由static类型变量引起的条件竞争问题
来源:互联网 发布:淘宝引流宝怎么设置 编辑:程序博客网 时间:2024/05/18 02:02
如果在并发编程过程中有一个局部变量被声明为static类型,该类型的变量在声明后就已经完成初始化。对于多线程调用的函数,对于该变量就会存在条件竞争:各个线程都认为自己是第一个初始化这个变量的线程;或者一个线程要使用这个变量的时候另外一个线程对该变量还没有初始化完成。
在c++11中可以解决这个问题:将初始化和定义放在一个线程中,并且没有其他线程可在初始化完成之前对其进行处理-使用std::call_once()函数进行处理。
定义于头文件 <mutex>
template< class Function, class... Args > void call_once( std::once_flag& flag, Function&& f, Args&& args... );
功能:执行功能f一次,即使从多个线程调用.
例子:
#include <iostream>#include <thread>#include <mutex> std::once_flag flag;
class my_class;my_class& get_my_class_instance(){ static my_class instance;//线程安全的初始化过程 return instance;}void do_once(){ std::call_once(flag,get_my_class_instance);} int main(){ std::thread t1(do_once); std::thread t2(do_once); std::thread t3(do_once); t1.join(); t2.join(); t3.join(); }
0 0
- c++并发编程中由static类型变量引起的条件竞争问题
- 函数static变量的线程竞争问题
- C语言中static类型的变量何时赋值?
- 由一个多线程共享Integer类变量问题引起的。。。
- 从头认识java-17.4 详解同步(1)-由竞争条件引发的问题
- 并发学习之:多线程编程中条件变量和虚假唤醒的讨论
- 【并发】多线程编程中条件变量和虚假唤醒的讨论
- 并发学习之:多线程编程中条件变量和虚假唤醒的讨论
- 由 TypeInitializationException 引起的问题
- 由Ftp引起的问题
- Servlet中出现的由多线程引起的问题
- Servlet中出现的由多线程引起的问题
- HBase中由Reverse DNS引起的问题
- 【Linux编程】竞争条件
- C中static变量
- linux中避免竞争条件的途径
- java中关于static 类型的变量声明与初始化的问题
- C语言中static的变量:
- 【C++ 学习】C++输入输出IO
- 关于数据存储大小端模式的C语言题目
- 植树问题
- 利用Intent跳转其他程序的拓展
- 数据结构----二叉树----建立与遍历
- c++并发编程中由static类型变量引起的条件竞争问题
- c语言笔记
- 190. Reverse Bits
- 行程问题
- 表达式求值
- 子对象构造函数和析构函数的调用顺序
- java反射
- 让Magento 新上传的产品在分类显示最前面?
- 51nod-1434 区间LCM