C++11多线程的原子操作
原子操作是同时只能有一个线程执行一个操作,不用使用互斥量即可实现,但是速度慢,而且一般只支持原生的类型,不够灵活。更多的用处是作为信号量进行使用。
示例代码,以int
为例子:
#include <atomic>
#include <thread>
#include <iostream>
#include <cstdlib>
#include <vector>int cnt = 0;
std::atomic_int cnt_ato = 0;void thread_write_add(int n) {for (int i = 0; i < n; ++i) {cnt++;}
}void thread_write_add_atomic(int n) {for (int i = 0; i < n; ++i) {cnt_ato++;}
}int main() {std::vector<std::thread>threads;for (int i = 0; i < 10; ++i) {threads.emplace_back(std::thread(&thread_write_add, 500000));}for (auto& t : threads) {t.join();}threads.clear();std::cout << "cnt = " << cnt << std::endl;for (int i = 0; i < 10; ++i) {threads.emplace_back(std::thread(&thread_write_add_atomic, 500000));}for (auto& t : threads) {t.join();}threads.clear();std::cout << "cnt_ato = " << cnt_ato << std::endl;system("pause");return 0;
}
输出结果:
使用原子操作的,保持了数据的正确性。
C++11多线程的原子操作相关推荐
- 【C++】多线程与原子操作和无锁编程【五】
[C++]多线程与原子操作和无锁编程[五] 1.何为原子操作 前面介绍了多线程间是通过互斥锁与条件变量来保证共享数据的同步的,互斥锁主要是针对过程加锁来实现对共享资源的排他性访问.很多时候,对共享资源 ...
- C++11 并发指南一(C++11 多线程初探)
引言 C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧, ...
- Linux与C++11多线程编程(学习笔记)
多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #inc ...
- [C++] - C++11 多线程 - Thread
转载整理自:https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/tree/master/zh/chapter3-Thread 1 ...
- C++11多线程---future、shared_future、atomic
目录 一.std::future的其他成员函数 二.std::shared_future 三.原子操作std::atmic 在上篇:C++11多线程---async.future.package_ta ...
- 【转】C++11多线程的基本使用
[转]C++11多线程的基本使用 来自:https://blog.csdn.net/wrx1721267632/article/details/52197849/ posted on 2018-08- ...
- C++11 多线程库使用说明
多线程基础 1.1 进程与线程 根本区别: 进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位 开销方面: 每个进程都有自己独立的代码和数据空间,程序之间的切换开销较大. 线程可以看作是 ...
- C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)
前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11 中的新的基础设施(主要是多线程.锁.条件变量)来阐述一个经典问题--生产者消费者模型,并给出 ...
- 算法移植优化(四)c++11 多线程
c++11多线程库:std::thread 一.join函数:用于等待线程对象运行结束 程序从main函数开始,本来由一个线程执行:当执行到std::thread定义一个线程对象,给定初始构造函数后, ...
最新文章
- win10如何查看NVIDIA驱动的版本
- Ubuntu安装deb软件包错误(依赖关系问题)解决
- 图灵奖颁给超算跑分开创者!MatlabSciPy都跟他有关:“我眼中一切都是线性代数”...
- 【Python基础】14_Python中的TODO注释
- 翻译职称计算机能力,2018年职称计算机word2003考点辅导:用好Office2003中的翻译功能...
- 小程序WXML基本使用
- 掩码 项目编码_每天进行20天的编码项目
- 拙见之drawPath()与fillPath
- python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画
- python数据格式简介_Python中数据类型时间的介绍(附代码)
- linux只打包空目录,linux 打包当前文件夹下所有文件的方法
- c语言表示三八译码器原理,三八译码器的结构、原理与设计.docx
- snipaste如何滚动截图_3款工具满足你对截图软件的所有想象
- 微博转载-是时候了,也该做个了结了。
- Linux I/O重定向 dup dup2 系统调用
- 用where in遇到null时的解决方法1
- JavaSE Lambda 表达式
- 网络购物需谨慎 “闲鱼”与“咸鱼“仅一个链接的距离
- 介绍Jackson JsonParser解析json
- c51中的intrins.h库函数
热门文章
- 在位置 0 处没有任何行。_我家孩子最爱这个小零食,外酥里糯,没有任何添加剂,0失败教程...
- asp.net oracle 问号,ASP.NET中文变问号问题解决方案
- 分拆素数和【筛选法】
- Cross-Modal Retrieval——为什么要使用GAN呢?
- [高精度整数] N的阶乘 [2006年清华大学计算机研究生机试真题]
- npm下载缓慢解决方法
- React 记坑 ----- 关于 react-redux 中共享状态更新时自动重新 render 页面的问题
- JAVA之outofmemory
- Mongodb添加超级管理员和普通用户
- DevExpress v18.1新版亮点——WinForms篇(六)