文章目录

  • 参考
  • 易犯的错误
  • 产生错误的原因
  • 正确的方法

参考

https://en.cppreference.com/w/cpp/atomic/atomic

易犯的错误

atomic flag(false);
thread th1;
352 void a() {
356 if (flag == false) {
357 th1= thread(&func);
358 flag= true;
359 }
360 }

这里直接对flag做等号判断。如果在多线程的情况下,这个操作本身是原子操作;
但是对于整个a函数里的if块来说,却不是原子操作,达不到共享数据的保护,因为if整个代码块是要求原子操作。多个线程可能同时判断flag在flase状态,从而导致随机问题的出现。

产生错误的原因

这个错误产生的原因是,没有系统的学习stl库,直接写代码,将原有逻辑,用在新事物上,经常会出现这种错误。

正确的方法

正确的方法是使用模板提供的方法:compare_exchange_strong,让判断与赋值在一个原子操作里做完。

C++: STL: atomic相关推荐

  1. STL::atomic原子操作

    原文地址:https://www.cnblogs.com/haippy/p/3252056.html C++11 并发指南已经写了 5 章,前五章重点介绍了多线程编程方面的内容,但大部分内容只涉及多线 ...

  2. C++17标准STL库并行策略在GCC编译器中的替代实现方法

    C++17标准STL库并行策略在GCC编译器中的替代实现方法 严正声明:本文系作者davidhopper原创,未经许可,不得转载.  2019年8月5日更新: GCC 9.1.0可支持C++ 17标 ...

  3. Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景

    Qt框架与STL库之间的巅峰对决:差异.优缺点及适用场景 引言 对比的重要性 Qt框架与STL库简介 博客内容概览 Qt框架基础 Qt框架的特点与组成 Qt的信号槽机制 Qt容器类简介 数据结构的对比 ...

  4. STL库(C++11)提供的异步执行方法的方式

    在进行并发编程的时候难免会遇到异步执行时候,现代C++标准库提供了几种异步执行的方式,本文收集整理了一下,以备将来翻阅. Thread方式 Thread 是STL提供的一种快捷创建线程的方式,极大方便 ...

  5. Atomic Layer Deposition原子层沉积技术

    Atomic Layer Deposition原子层沉积技术 原子层沉积技术(Atomic Layer Deposition)是一种原子尺度的薄膜制备技术.可以沉积均匀一致,厚度可控.成分可调的超薄薄 ...

  6. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

  7. C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)

    1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...

  8. C++ 笔记(22)— STL string 类(字符串赋值、访问、拼接、查找、翻转、大小写转换)

    1. 实例化和赋值 STL string #include <string> #include <iostream>int main () {using namespace s ...

  9. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  10. Go 学习笔记(23)— 并发(02)[竞争,锁资源,原子函数sync/atomic、互斥锁sync.Mutex]

    本文参考 <Go 语言实战> 1. 竞争状态简述 如果两个或者多个 goroutine 在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争的状态,这种情况 ...

最新文章

  1. 共轭矩阵与自共轭矩阵
  2. 南京晓庄学院java实验五_讲座|城市文化与南京世界“文学之都”的建设
  3. Storm源码分析之四: Trident源码分析
  4. php抓取多个网页合并,PHP 使用 CURL 同步抓取多个网页
  5. UVA - 210:Concurrency Simulator
  6. 用计算机计算电力系统故障,用计算机计算电力系统故障的方法.ppt
  7. php二分查找例题,PHP实现的二分查找算法实例分析
  8. 高手详解SQL性能优化十条建议
  9. eclipse开发webservice实例及问题解决
  10. JAVA多线程面试题及答案
  11. C++网站如何实现短信验证码功能?
  12. 深蓝-视觉slam-第三节习题
  13. linux下打开.mpp文件(微软project)
  14. android 京东平板布局,京东商城上线安卓Pad客户端 完美布局移动端
  15. javascript常用工具类的封装
  16. Android | 说说Presentation
  17. word显示“VBE6EXT.OLB不能加载”和“无法找到宏或宏已被禁用”
  18. Python GUI编程入门(31)-Treeview控件
  19. iconfont怎么引入html,Web页面中引用iconfont图标
  20. ccie入门学习day1

热门文章

  1. Oracle 行转列的坑
  2. Java8 根据身份证号获取年龄
  3. python无限循环小数_如何把一个无限循环小数转换成一个分数(算法)
  4. centos 7.6 安装mariadb
  5. Codeforces::GYM 102896E Easy Measurements
  6. Linux:理论 面试
  7. 大一新生计算机课word知识,大一计算机结业论文
  8. 人工智能第二章知识表示
  9. 【MySQL学习】DQL语言的学习 Data Query Language
  10. 毕业即失业,转行软件测试的辛酸泪只有自己知道