当前位置: 首页 > news >正文

C++11的原子变量

        C++11提供了一个原子类型std::atomic<T>,可以使用任意类型作为模板参数,C++11内置了整型的原子变量,可以更方便的使用原子变量,使用原子变量就不需要使用互斥量来保护该变量了,用起来更简洁。例如,要做一个计数器,使用mutex是这样的,如下代码:

#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
using namespace std;int value = 0;std::mutex g_mutex;void increment()
{for(int i = 0; i < 10; i++){std::lock_guard<std::mutex> lock(g_mutex);++value;cout << "increment value: " << value << endl;}
}void decrement()
{for(int i = 0; i < 10; i++){std::lock_guard<std::mutex> lock(g_mutex);--value;cout << "decrement value: " << value << endl;}
}int main()
{thread t1(increment);thread t2(decrement);t1.join();t2.join();return 0;
}

        如果使用了原子变量,就不需要再定义互斥量了,使用更方便了,如下代码清单:

#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
#include <atomic>
using namespace std;


std::atomic<int> value;

void increment()
{
    for(int i = 0; i < 10; i++)
    {
        ++value;
        cout << "increment value: " << value.load() << endl;
    }
}


void decrement()
{

    for(int i = 0; i < 10; i++)
    {
        --value;
        cout << "decrement value: " << value.load() << endl;
    }
}

int main()
{
    thread t1(increment);
    thread t2(decrement);

    t1.join();
    t2.join();

    return 0;
}

相关文章:

C++11的原子变量

C11提供了一个原子类型std::atomic<T>&#xff0c;可以使用任意类型作为模板参数&#xff0c;C11内置了整型的原子变量&#xff0c;可以更方便的使用原子变量&#xff0c;使用原子变量就不需要使用互斥量来保护该变量了&#xff0c;用起来更简洁。例如&#xff0c;要做一…...

北京交通大学 计算机网络体系与协议(研) 考试试卷

计算机网络体系与协议2023年期末考试 时长&#xff1a;120分钟 学院&#xff1a; 学号&#xff1a; 姓名&#xff1a; 一、简答题&#xff08;每题5分&#xff09; 1.简述公开密钥密码体制的工作原理…...

python之pyqt专栏7-信号与槽3

在上一篇文章中python之pyqt专栏6-信号与槽2-CSDN博客中&#xff0c;我们可以了解到对象可以使用内置信号&#xff0c;这些信号来自于类定义或者继承过来的。我们可以对这些信号可以通过connect连接槽函数。 需求 现在有一个需求&#xff0c;有两个UI界面“untitled.ui”和“u…...

高噪点灰度图目标粗定位CoraseLocation

高噪点的灰度图目标粗定位 /* ** name: CoraseLocation ** brief: 粗定位 ** param:[in] srcGray 灰度图&#xff08;&#xff09; ** param:[in] box 目标尺寸&#xff08;像素&#xff09; ** param:[ou] roi 目标定位结果 ** return: true成功&#xff0c;false…...

Android:Google三方库之Firebase集成详细步骤(二)

Analytics分析 1、将 Firebase 添加到您的 Android 项目&#xff08;如果尚未添加&#xff09;&#xff0c;并确保在 Firebase 项目中启用了 Google Analytics&#xff08;分析&#xff09;&#xff1a; 如果您要创建新的 Firebase 项目&#xff0c;请在项目创建过程中启用 G…...

java使用freemarker模板生成html,再生成pdf

1.freemarker模板生成html 添加Maven依赖 在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>创建Freemarker…...

图解系列--Web服务器,Http首部

1.用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。。比如&#xff0c;提供 Web 托管服务&#xff08;Web Hosting Service&#xff09;的供应商&#xff0c;可以用一台服务器为多位客户服务&#xff0c;也可以以每位客户持有的域名运行各自不…...

直线(蓝桥杯)

直线 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中&#xff0c;两点可以确定一条直线。如果有多点在一条直线上&#xff0c; 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…...

Android:从源码看FragmentManager如何工作

一个Activity中&#xff0c;在某一个容器中&#xff0c;更换不同的Fragment&#xff0c;从而显示不同的界面&#xff0c;这个场景相信大家已经非常熟悉了&#xff0c;也知道Activity是通过FragmentManager来管理嵌入的Fragments的&#xff0c;所以今天就来看看FragmentManager是…...

LabVIEW通过编程将图形类控件的X轴显示为时间戳

LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点&#xff0c;可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW&#xff0c;这些属性节点无法在同一个位置找到。请参阅以下部分&#xff0c;了解特定版本LabVIEW的相关属性节点的位置。 …...

Spring Boot进行单元测试,一个思路解决重启低效难题!

所谓单元测试就是对功能最小粒度的测试&#xff0c;落实到JAVA中就是对单个方法的测试。 junit可以完成单个方法的测试&#xff0c;但是对于Spring体系下的web应用的单元测试是无能为力的。因为spring体系下的web应用都采用了MVC三层架构&#xff0c;依托于IOC&#xff0c;层级…...

c/c++ header_only 头文件实现的关键点

header_only 头文件实现的关键点 ------------------------------------------------------------------------- author: hjjdebug date: 2023年 11月 28日 星期二 16:58:38 CST descriptor: header_only 头文件实现的关键点1. 对外声明的函数必需加上inline, 消除连接的歧义…...

Linux(CentOS7.5):通过docker安装redis

一、准备配置文件 在宿主机&#xff0c;准备映射配置文件的目录下&#xff0c;运行如下&#xff1a; wget http://download.redis.io/redis-stable/redis.conf二、安装 docker run \ --restartalways \ --log-opt max-size100m \ --log-opt max-file2 \ -p 6380:6379 \ -v /opt…...

唯创知音WT588F02B-8S语音芯片:灵活更换语音内容,降低开发成本与备货压力

在电子产品的开发阶段&#xff0c;语音芯片的选择与使用对于产品的功能、成本和上市时间都有着重要影响。唯创知音的WT588F02B-8S语音芯片以其独特的优势&#xff0c;成为工程师们的理想选择&#xff0c;尤其在样品阶段&#xff0c;它为工程师提供了自行更换语音内容的便利&…...

git的创建以及使用

1、上传本地仓库 首先确定项目根目录中没有.git文件&#xff0c;有的话就删了&#xff0c;没有就下一步。在终端中输入git init命令。注意必须是根目录&#xff01; 将代码存到暂存区 将代码保存到本地仓库 2、创建git仓库 仓库名称和路径&#xff08;name&#xff09;随便写…...

面试笔记--Linux常用命令

文件和目录操作&#xff1a; ls: 列出目录内容 例子&#xff1a;ls -l - 列出详细信息&#xff0c;包括权限、所有者等 cd: 切换目录 例子&#xff1a;cd Documents - 进入 “Documents” 目录 pwd: 显示当前工作目录 例子&#xff1a;pwd - 显示当前工作目录的路径 cp: 复制文…...

【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核任务中断)、与硬件的关系实现

文章目录 一、为什么要学习μC/OS-III二、嵌入式操作系统的发展历史三、实时操作系统的特点四、基本概念1. 前后台系统2. 操作系统3. 实时操作系统&#xff08;RTOS&#xff09;4. 内核5. 任务6. 任务优先级7. 任务切换8. 调度9. 非抢占式&#xff08;合作式&#xff09;内核10…...

在easyswoole 中,配置文件如何加载外部配置

在一个项目中 目录结构是这样的 网站的公共配置&#xff0c;包括一些数据库连接配置&#xff0c;redis连接配置 /web/config/redis_config.php/web/config/mysql_config.php 下面是Easyswoole 项目目录 所有的配置均放在ES项目中的Config目录中 文件名且采用大驼峰命名。如…...

小程序微信支付API?以及参数有哪些

微信小程序支付API有两个&#xff0c;分别是 wx.chooseWXPay 和 wx.pay。 wx.chooseWXPay 是用于唤起微信支付的API&#xff0c;它支持扫码支付、JSAPI支付、APP支付等。它返回一个Promise对象&#xff0c;可以在then方法中处理支付结果。 wx.pay 是用于发起微信支付的API&am…...

【算法】一个简单的整数问题(树状数组、差分)

题目 给定长度为 N 的数列 A&#xff0c;然后输入 M 行操作指令。 第一类指令形如 C l r d&#xff0c;表示把数列中第 l∼r 个数都加 d。 第二类指令形如 Q x&#xff0c;表示询问数列中第 x 个数的值。 对于每个询问&#xff0c;输出一个整数表示答案。 输入格式 第一行…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...