C++: STL: atomic
文章目录
- 参考
- 易犯的错误
- 产生错误的原因
- 正确的方法
参考
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相关推荐
- STL::atomic原子操作
原文地址:https://www.cnblogs.com/haippy/p/3252056.html C++11 并发指南已经写了 5 章,前五章重点介绍了多线程编程方面的内容,但大部分内容只涉及多线 ...
- C++17标准STL库并行策略在GCC编译器中的替代实现方法
C++17标准STL库并行策略在GCC编译器中的替代实现方法 严正声明:本文系作者davidhopper原创,未经许可,不得转载. 2019年8月5日更新: GCC 9.1.0可支持C++ 17标 ...
- Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景
Qt框架与STL库之间的巅峰对决:差异.优缺点及适用场景 引言 对比的重要性 Qt框架与STL库简介 博客内容概览 Qt框架基础 Qt框架的特点与组成 Qt的信号槽机制 Qt容器类简介 数据结构的对比 ...
- STL库(C++11)提供的异步执行方法的方式
在进行并发编程的时候难免会遇到异步执行时候,现代C++标准库提供了几种异步执行的方式,本文收集整理了一下,以备将来翻阅. Thread方式 Thread 是STL提供的一种快捷创建线程的方式,极大方便 ...
- Atomic Layer Deposition原子层沉积技术
Atomic Layer Deposition原子层沉积技术 原子层沉积技术(Atomic Layer Deposition)是一种原子尺度的薄膜制备技术.可以沉积均匀一致,厚度可控.成分可调的超薄薄 ...
- C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)
1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...
- C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)
1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...
- C++ 笔记(22)— STL string 类(字符串赋值、访问、拼接、查找、翻转、大小写转换)
1. 实例化和赋值 STL string #include <string> #include <iostream>int main () {using namespace s ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- Go 学习笔记(23)— 并发(02)[竞争,锁资源,原子函数sync/atomic、互斥锁sync.Mutex]
本文参考 <Go 语言实战> 1. 竞争状态简述 如果两个或者多个 goroutine 在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争的状态,这种情况 ...
最新文章
- 共轭矩阵与自共轭矩阵
- 南京晓庄学院java实验五_讲座|城市文化与南京世界“文学之都”的建设
- Storm源码分析之四: Trident源码分析
- php抓取多个网页合并,PHP 使用 CURL 同步抓取多个网页
- UVA - 210:Concurrency Simulator
- 用计算机计算电力系统故障,用计算机计算电力系统故障的方法.ppt
- php二分查找例题,PHP实现的二分查找算法实例分析
- 高手详解SQL性能优化十条建议
- eclipse开发webservice实例及问题解决
- JAVA多线程面试题及答案
- C++网站如何实现短信验证码功能?
- 深蓝-视觉slam-第三节习题
- linux下打开.mpp文件(微软project)
- android 京东平板布局,京东商城上线安卓Pad客户端 完美布局移动端
- javascript常用工具类的封装
- Android | 说说Presentation
- word显示“VBE6EXT.OLB不能加载”和“无法找到宏或宏已被禁用”
- Python GUI编程入门(31)-Treeview控件
- iconfont怎么引入html,Web页面中引用iconfont图标
- ccie入门学习day1