std::atomic和std::mutex区别

2023-11-03

​std::atomic介绍​

​模板类std::atomic是C++11提供的原子操作类型,头文件 #include<atomic>。​在多线程调用下,利用std::atomic可实现数据结构的无锁设计。​​

​和互斥量的不同之处在于,std::atomic原子操作,主要是保护一个变量,互斥量的保护范围更大,可以一段代码或一个变量。std::atomic​确保任意时刻只有一个线程对这个资源进行访问,避免了锁的使用,提高了效率。​​

​​原子类型和内置类型对照表如下:​​

 

以下以两个简单的例子,比较std::mutex和std::atomic执行效率

atomic和mutex性能比较

使用std::mutex

#include "stdafx.h"

#include <iostream>
#include <ctime>
#include <mutex>
#include <thread>
#include<future>

std::mutex mtx;

int cnt = 0; 

void mythread()
{
  for (int i = 0; i < 1000000; i++)
  {
    std::unique_lock<std::mutex> lock(mtx);
    cnt++;
  }
}

int main()
{
  clock_t start_time = clock();

  std::thread t1(mythread);
  std::thread t2(mythread);
  t1.join();
  t2.join();

  clock_t cost_time = clock() - start_time;
  std::cout << "cnt= " << cnt << " 耗时:" << cost_time << "ms" << std::endl;

  return 0;
}

执行结果:

使用std::atomic

#include <iostream>
#include <ctime>
#include <thread>
#include<future>

std::atomic<int> cnt(0);

void mythread()
{
  for (int i = 0; i < 1000000; i++)
  {
    cnt++;
  }
}

int main()
{
  clock_t start_time = clock();

  std::thread t1(mythread);
  std::thread t2(mythread);
  t1.join();
  t2.join();

  clock_t cost_time = clock() - start_time;

  std::cout << "cnt= " << cnt << " 耗时:" << cost_time << "ms" << std::endl;

  return 0;
}

执行结果如下:

总结

​通过以上比较,可以看出来,使用std::atomic,耗时比std::mutex低非常多,​使用 std::atomic ​​能大大的提高程序的运行效率。​​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::atomic和std::mutex区别 的相关文章

  • 有哪些初学者程序员不知道的小技巧?

    提到新手程序员 大家想到的第一个词可能就是 刷题 尤其是通过LeetCode刷题 想必新手程序员们都经历过这一步 甚至不少人认为只要在LeetCode上刷的题目够多 就一定能够进阶为大神 但是 不难发现 LeetCode上的题目都是算法片段
  • 软件开发项目流程 - 立项

    引言 在互联网行业从事开发工作三年余 虽然时间不长 但对于开发流程也有一定的认识 写一篇关于这方面的内容 以记录自己的成长历程 引言 目的 立项流程 标准项目管理 总结 目的 当我们发现市场上有一个项目有利可图 且我们有能力做的时候 发起的
  • 轻松刷脸是美妙的线下消费体验过程

    刷脸支付的过程非常的简单 你不需要带钱包 信用卡或手机 支付时只需要自己面对刷脸支付pos机屏幕上的摄像头 刷脸支付系统会自动将消费者面部信息与个人账户相关联 整个交易过程十分便捷 在移动支付的快速发展中 消费者逐渐习惯使用移动支付 即使身
  • 刷脸支付算法和硬件不断升级消费更有保障

    刷脸支付设备依靠3D传感摄像头进行人脸识别 其内置的点阵投影仪可以投射出3万多个肉眼不可见的红外点到用户脸部 多维度 多角度在颜色 纹理 深度等数据进行高层次对比 安全性和精准性更高 识别速度更快 尽管现在刷脸支付的安全性已经达到极高的金融
  • 如何写好一份软件开发设计文档

    设计文档 也被称作技术规范和实现手册 描述了你如何去解决一个问题 是确保正确完成工作最有用的工具 其目的是迫使你对设计展开缜密的思考 并收集他人的反馈 进而完善你的想法 同时在软件交付和交接的过程中 能让其他人更通俗易懂的了解之前的设计目的
  • 刷脸支付俨然形成风口抓住风口才能起飞

    刷脸支付项项目的热度越来越高 更多的支付巨头参与到其中来 最近各大银行联合发布了刷脸支付刷脸付 把刷脸支付的热度推到一个新的高度 刷脸支付这么火热 各大支付巨头纷纷投入巨额资金抢占市场 随着我国支付行业的发展 刷脸支付已然成为下一代支付方式
  • WSS 代码执行的权限提升

    WSS 代码执行的权限提升 概述 WSS 默认使用身份模拟执行代码 也就是说用当前登录的用户身份执行Web Part或者自定义应用程序的代码访问 在大多数情况下 这种机制能够准确并严格地控制了标准权限的用户他对特定网站资源和敏感数据的访问
  • 刷脸支付机会是留给敢迈出第一步的人

    从支付宝推出余额宝 花呗等功能大幅培养用户理财习惯 到微信支付通过微信红包打通朋友圈 微信支付和支付宝的擂台之战从未平息 面对10亿交易笔数到20亿的跨越 较量已经从扫码支付延伸至了各式各样的甚至难啃的场景 比如停车场无感支付 线下的刷脸支
  • 2021上半年

    转眼间 2021年已经过去了一半 按照记账惯例 每逢月底 要对当月的财务状况进行结算 6月的话 还要再额外增加一轮年中结算 同时 受到近期一系列调整的影响 记录表也相应进行比较大的变更 以适应复杂度的增加 以至于 例行结算迟了两天才完成 但
  • C++实现设计模式之观察者模式

    什么是观察者模式 观察者模式是一种一对多的以来关系 当一个对象的状态发生改变时 所有依赖于他的对象都得到通知并被自动更新 它的主体是通知的发布者 发出通知时并不需要知道谁是它的观察者 可以有任意数目的观察者订阅并接收通知 将观察者和被观察的
  • 刷脸和无感支付是社会科学发展的产物和动力

    手机支付不应该多过 而且有自动与支付余额联机 刷手机才是赚钱的出路 对比来看 手机支付操作简单但基础好 有相当多用户加入的话 就没有任何风险了 自动与支付余额联机有效 而对于支付余额联机更有效 但比安全性较低 不利于用户操作 而对于与银行合
  • 仅仅是一张照片就是不能刷脸支付的

    科技改变未来并不是一句口号 就拿买东西来讲 以前人们都是一手交钱一手交货 拿到大额的纸币 还要验真假 而现在移动支付成为主要付款方式 只要一部手机 扫一扫就能付款 一开始也有很多人不习惯手机支付 因为觉得没有现金实在 整天就是一堆数字转来转
  • 刷脸开门上班取外卖等都会无处不在

    刷脸支付的诞生掀起了支付宝微信的竞争关系 但其实在二维码支付开始流行时 支付宝和微信的竞争关系便已埋下种子 当时抢着做扫码支付的创业者更是一批接着一批 丝毫不亚于如今刷脸支付服务商的趋势 而早些入局扫码支付的创业者们 凭借扫码支付打了漂亮的
  • 软件著作权申请注意事项——常见问题[详细版,不断补充中]

    近期在申请几个软著 查询了大量资料 打了很多电话 经过几次 亲身尝试后 总结出了以下要点问题 基本涵盖了目前网上搜不到的一些注意事项 如有问题欢迎在评论中一起讨论 2020年8月上线了新系统 本说明进行了相应调整 请先阅读 0 新系统计算机
  • 预警:传统的QA岗位将被DevOps淘汰

    导读 在大多数机构或公司里 软件开发过程主要遵循一个或多个开发模型 例如瀑布模型或敏捷模型 在瀑布模型中 测试活动一般都在后期进行 软件开发完成后 缺陷被QA团队找出 然后再被修复 后两个活动不断循环和重复 指导管理者认为软件可以被公开发布
  • 【期末复习】软件工程

    结构化分析 数据流图 er图 状态转换图 数据字典 结构化设计 流程图 盒图 pad图 IPO图 判定表 判定树 软件结构图 面向对象分析 用例图 活动图 包图 类图 顺序图 协作图 状态图 面向对象设计 三层架构 构件图 部署图 软件生存
  • 快速学习Python基础知识(3)

    一 输入输出 1 1 input输入函数的使用 input函数 是获取键盘输出 保存成一个字符串 注意 input 函数的返回值是一个字符串类型 即便你输入的是数字 返回的也会以一个字符串的形式返回给我们 inputStr input 提示
  • 微信游戏如何开发

    中懿游游戏软件开发 微信游戏开发通常涉及使用微信小游戏平台进行开发 微信小游戏是一种在微信平台上运行的轻量级游戏 用户可以在微信中直接体验 无需下载安装 以下是在微信平台上开发小游戏的一般步骤 1 注册微信开发者账号 访问 微信开放平台 注
  • 低代码助力全栈开发

    目录 低代码功能展示 1 拖拽式 UI 组件 2 更快的开发速度 3 敏捷原型设计 4 与数据库集成 低代码开发工具正变得日益强大 它正不断弥合着前后端开发之间的差距 对于后端来说 基于低代码平台开发应用时 完全不用担心 前端的打包 部署
  • 2024 年 15 大软件开发趋势

    步入 2024 年 在技术创新和不断变化的市场需求的推动下 软件开发格局继续呈指数级发展 对于企业和开发人员来说 紧跟这些趋势不仅有益 而且对于保持竞争力和成功至关重要 在本文中 我们探讨了预计将在 2024 年产生重大影响的关键软件开发趋

随机推荐

  • nodejs面试官:如何实现jwt鉴权机制?说说你的思路

    一 是什么 JWT JSON Web Token 本质就是一个字符串书写规范 如下图 作用是用来在用户和服务器之间传递安全可靠的信息 在目前前后端分离的开发过程中 使用token鉴权机制用于身份验证是最常见的方案 流程如下 服务器当验证用户
  • 游戏服务器被攻击了怎么办?

    随着互联网的发展 网民数量激增 电子游戏的普及 庞大的玩家数量必然推动游戏市场发展 游戏受到攻击是游戏开发者的痛点 DDOS攻击是流量攻击的一个总称 还包括SYN Flood ACK Flood UDP Flood TCP Flood IC
  • Java按一行一行进行文件的读取或写入

    测试代码 import org junit jupiter api Test import java io import java util Arrays public class FileTest 一行一行读取文件 适合字符读取 若读取中
  • Android 生态消息推送平台介绍

    一 手机厂商平台 华为消息推送服务 华为推送 Push 是为开发者提供的消息推送平台 建立了从云端到手机端的消息推送通道 使应用可以将最新信息及时通知用户 从而构筑良好的用户关系 提升用户的感知和活跃度 推送透传消息 以透传方式将自定义的内
  • Python中“from docx import Document“报错问题以及怎么提取.docx文档中所有的红色字体

    1 Python中 from docx import Document 报错问题 Pycharm中 当我们输入 from docx import Document 报错问题 在Pycharm中 我们若是想要操作word文件 我们就必须要使用
  • 广度优先搜索(1)之树的层序遍历

    文章目录 零 导言 一 例子引入 1 题目描述 2 题目分析 3 算法实现与解释 二 概念定义 1 定义 2 深入理解 3 相关知识 三 相关习题 零 导言 这一系列博客的创作初衷是为了记录自己在刷题过程中对于一些比较经典的并且很哇塞的题型
  • 苹果cmsV10采集插件&&一键配置定时任务采集

    苹果cmsV10采集插件 下载地址 https pan baidu com s 1NuY0sTQbp CjGaXYH2fdsg 支持断点采集 支持添加播放器自定义解析接口 支持批量修改播放器接口 支持全网搜索资源 支持一键配置定时任务 安装
  • 介绍8421码,5421码,2421码

    8421码 5421码 2421码都是用编码中的bcd码组成的 而bcd码是用 4 位二进制来表示 1 位十进制 即使用 4 个位来存储一个十进制的值 使二进制和十进制之间得到快速转换 bcd码又可分为有权码和无权码两类 无权码包括了余3码
  • 一周AIGC丨国内首个估值 100 亿级大模型独角兽诞生,腾讯混元、蚂蚁金融大模型亮相...

    成立于 2019 年的智谱 AI 晋升为国内首个估值超 100 亿人民币的大模型领域独角兽 早一个月把电灯泡拿出来 不重要 的腾讯 最终还是免不了随大流 腾讯混元大模型正式推出 但用户还要排队申请 蚂蚁金融大模在外滩大会亮相 宣称解决产业真
  • C语言必背代码大全

    对于刚学计算机编程的同学来说 每一个编程知识都觉得很重要 下面小编为大家整理了c语言必背代码 希望大家喜欢 1 输出9 9口诀 共9行9列 i控制行 j控制列 include stdio h main int i j result for
  • 2014传智播客C++第三期基础班+就业班至9月份 完整版

    课程简介 第一阶段C语言10天 此阶段兼顾基础班升级学员与直接报就业班学员 突出面试辅导为主 1 常量与变量 数据类型 数据类型转换 数据输入与输出 面试辅导 2 C语言运算符 C语言操作符 C语言表达式 表达式优先级 面试辅导 3 C语言
  • 图的深度优先遍历DFS (邻接矩阵实现) c语言

    图的遍历是指从图中的某一顶点出发 按照一定的策略访问图中的每一个顶点 每个顶点有且只能被访问一次 深度优先遍历也叫深度优先搜索 Depth First Search 它的遍历规则 先选择一个初始顶点 再规定一个方向 例如往右边一直遍历 于是
  • canvas基本用法

    首先创建canvas元素
  • 在Windows下编译扩展OpenCV 3.4.2 + opencv_contrib

    请参考 https www cnblogs com jliangqiu2016 p 5597501 html 这里主要说一下注意点 1 编译过程中会提示缺少以下文件 vgg generated 48 i vgg generated 64 i
  • 欧拉角的详解

    转自 https blog csdn net schrodinger1900 article details 52734568 关于旋转永远是做游戏的难点和混乱点 我们知道表示一个旋转有多种方式 简单的欧拉角 复杂点的四元数 再复杂点的矩阵
  • PS 2023 24.7 Beta Ai 如何解决橙色错误弹窗问题?

    距离Adobe软件公司首次将图像编辑及数字绘画软件Photoshop推出到大众面前已经过去35年 最近该公司又再次书写了属于Photoshop的历史新篇章 Adobe 发布的 Photoshop Beta 新增 创意填充 Generativ
  • Linux操作系统shell指令详解

    shell指令基本概念 命令行提示符 ubuntu 用户名 分隔符 ubuntu 主机名 家目录 当前所在的路径 普通用户权限 root 切换用户 su 用户名 gt 切换到指定用户 su gt 默认切换到超级用户 sudo 加在指令前 g
  • 【Hyperledger Fabric 开发学习1】 环境搭建

    1 概览 准备工作 1 系统环境准备 Ubuntu 20 02 LTC 2 apt 更换镜像源 3 辅助工具安装 4 安装go 5 安装容器docker和docker compose Hyperledger Fabric安装 方法1 以bo
  • Unity常见平台汇总

    UNITY EDITOR Unity编辑器 UNITY EDITOR WIN Windows 操作系统 UNITY EDITOR OSX macos操作系统 UNITY STANDALONE OSX 专门为macos 包括Universal
  • std::atomic和std::mutex区别

    std atomic介绍 模板类std atomic是C 11提供的原子操作类型 头文件 include