C++之atomic_load与atomic_store原子操作实例(一百八十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C++类ostream与ifstream读写文件操作

什么是原子性

在C++中,原子性(atomicity)是指一个操作的执行要么完全执行,要么完全不执行,没有中间状态或者被其他线程干扰的可能性。原子操作可以被认为是不可分割的单元,要么被完整地执行,要么不执行。

C++标准库提供了std::atomic模板类和相关函数来支持原子操作。对于std::atomic对象,它的操作(比如存储和加载)可以保证原子性,即使在多线程环境下也可以正确工作。这意味着当一个线程正在执行原子操作时,其他线程无法同时干扰或修改该操作涉及的数据。

使用原子操作可以避免多线程环境下的数据竞争和并发访问问题,确保线程安全性。原子性是一种重要的并发编程概念,在并发程序设计中起到了关键作用。

  • 1.std::atomic_store函数是C++标准库中std::atomic模板类的成员函数之一,用于将给定的值存储到std::atomic对象中。
    下面是std::atomic_store函数的定义:
template <typename T>
void atomic_store(std::atomic<T>* obj, T value) noexcept;

obj是一个指向std::atomic对象的指针,而value是要存储的值。

该函数没有返回值,且被声明为noexcept,表示在发生异常时不会抛出异常。

使用std::atomic_store函数可以确保存储操作的原子性,在多线程环境中保证正确的数据修改。

  • 2.std::atomic_load函数是C++标准库中std::atomic模板类的成员函数之一,用于从std::atomic对象中读取值。

下面是std::atomic_load函数的定义:

template <typename T>
T atomic_load(const std::atomic<T>* obj) noexcept;

obj是一个指向std::atomic对象的指针。

该函数返回一个类型为T的值,表示从std::atomic对象中读取的值。

该函数被声明为noexcept,表示在发生异常时不会抛出异常。

使用std::atomic_load函数可以确保读取操作的原子性,在多线程环境中保证正确的数据读取。

2.应用实例

<1>.std::atomic_store函数:存储值到std::atomic对象中

#include <iostream>
#include <atomic>int main() {std::atomic<int> value(0);std::cout << "value: " << value << std::endl;std::atomic_store(&value, 42);std::cout << "Stored value: " << value << std::endl;return 0;
}

<2>.std::atomic_store函数:从std::atomic对象中读取值

#include <iostream>
#include <atomic>int main() {std::atomic<int> myAtomicVariable(42);int loadedValue = std::atomic_load(&myAtomicVariable);std::cout << "Loaded value: " << loadedValue << std::endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/73576.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他是98年的卷王,我真的玩不过他····

现在的小年轻真的卷得过分了。前段时间我们公司来了个98年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…

汽车租赁管理系统/汽车租赁网站的设计与实现

摘 要 租赁汽车走进社区&#xff0c;走进生活&#xff0c;成为当今生活中不可缺少的一部分。随着汽车租赁业的发展&#xff0c;加强管理和规范管理司促进汽车租赁业健康发展的重要推动力。汽车租赁业为道路运输车辆一种新的融资服务形式、广大人民群众一种新的出行消费方式和…

Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find

问题再现&#xff1a; 2023-08-15 16:51:16,151 DEBUG [reactor-http-nio-2][CompositeLog.java:147] - [dc73b32c-1] Encoding [{timestampTue Aug 15 16:51:16 CST 2023, path/content/course/list, status503, errorService Unavai (truncated)...] 2023-08-15 16:51:16,17…

Mathematica(42)-计算N个数值的和

比如&#xff0c;我们要用Mathematica求得到下面的式子&#xff1a; 这就需要用到一个函数&#xff1a;Sum 具体地&#xff0c;Sum函数的使用形式如下&#xff1a; 因此&#xff0c;按照公式就可以得到下面的结果&#xff1a; 如果&#xff0c;我们想要将求和号也加进去&#…

Java 项目日志实例基础:Log4j

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 介绍几个日志使用方面的基础知识。 1 Log4j 1、Log4j 介绍 Log4j&#xff08;log for java&#xff09;是 Apache 的一个开源项目&#xff0c;通过使用 Log4j&#xff0c;我…

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法&#xff0c;这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法&#xff1a;基于GitHub上ShiftMediaProject/FFmpeg项目&#xff0c;下面对编译过程进行说明…

http库 之 OKHttpUtil

源码位置 方便实用&#xff0c;个人感觉不错 依赖 <dependency><groupId>io.github.admin4j</groupId><artifactId>common-http-starter</artifactId><version>0.7.5</version> </dependency>代码实践 /*** 通用http的pos…

飞天使-k8s简单搭建(编写中)

文章目录 k8s概念安装部署-第一版无密钥配置与hosts与关闭swap开启ipv4转发安装前启用脚本开启ip_vs安装指定版本docker 安装kubeadm kubectl kubelet,此部分为基础构建模版 k8s一主一worker节点部署k8s三个master部署,如果负载均衡keepalived 不可用&#xff0c;可以用单节点做…

数据挖掘 | 零代码采集房源数据,支持自动翻页、数据排重等

1 前言 城市规划、商业选址等应用场景中经常会对地区房价、地域价值进行数据分析&#xff0c;其中地区楼盘房价是分析数据中重要的信息参考点&#xff0c;一些互联网网站上汇聚了大量房源信息&#xff0c;通过收集此类数据&#xff0c;能够对地区房价的分析提供参考依据。 如何…

无脑入门pytorch系列(四)—— scatter_

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

ansible入门

ansible入门 一.ansible 背景介绍 Ansible 是一个广受欢迎的 IT 自动化系统。可以用来处理配置管理、应用自动化部署、云资源配给、网络 自动化和多借点部署等任务。其也可以使得复杂的变更如带负载均衡的零停机滚动更新更加容易。Ansible.com 1.1 自动化运维概念 1.1.1 运维…

Linux0.11内核源码解析-truncate.c

truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块&#xff0c;包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0&#xff0c;并释放占用的设备空间。 索引节点的逻辑块连接方式 释放一次间接块 static void free_ind(int dev,int block) {…