当前位置:首页 > 数码 > 深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)

深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)

admin5个月前 (04-14)数码50

一、引言

在并发编程中,原子操作是一种无法终止的操作,即在多线程环境中,一旦开局就不会被其余线程搅扰。C++11引入了std::atomic库以支持原子操作,为并发编程提供了更为方便和高效的模式。本文将深化讨论现代C++中的原子操作及其关系概念,并经过代码示例展现其运行。

二、std::atomic的基本概念

std::atomic是C++规范库中的一个模板类,用于封装数据类型并为其提供原子操作。这些操作在多线程环境中是安保的,即它们不会被其余线程终止。经过经常使用std::atomic,开发者可以确保数据在多线程环境中的分歧性和正确性。

三、std::atomic的关键配置

深化剖析

四、代码示例与解说

以下是一个经常使用std::atomic的方便示例,该示例展示了如何经常使用原子操作成功一个线程安保的计数器:

#include<tream>#include<thread>#include<vector>#include<atomic>std::atomic<int>counter(0);//定义一个原子整数计数器voidincrement(){for(inti=0;i<1000;++i){++counter;//原子参与操作}}intmn(){std::vector<std::thread>threads;for(inti=0;i<10;++i){threads.push_back(std::thread(increment));//创立多个线程同时参与计数器}for(auto&t:threads){t.join();//期待一切线程口头终了}std::cout<<"Counter:"<<counter<<std::endl;//输入最终的计数器值return0;}

在上述代码中,咱们经常使用std::atomic<int>定义了一个原子整数计数器。在多个线程中,咱们经过对计数器口头原子参与操作来成功线程安保的计数。最终,咱们输入计数器的值,该值应为10000(10个线程,每个线程参与1000次)。

五、论断与展望

本文具体讨论了现代C++中的原子操作及其关系概念,并经过代码示例展现了其运行。经过经常使用std::atomic,开发者可以确保数据在多线程环境中的分歧性和正确性,从而提高并发程序的性能和牢靠性。但是,须要留意的是,适度经常使用原子操作或者会造成性能降低,因此在实践运行中须要掂量并选用适合的同步机制。


应用程序正常初始化(Ox0000022)失败。请单击“确定”,终止应运程序

你最近是怎么操作的?将出事前下载的软件、补丁、驱动全部卸载试试。 另外,你在操作什么时候出现的提示?将这个程序卸载重装试试,如果查不出来,在看看下面的方法。 如果故障依旧,建议先查杀一下木马,修复一下系统试试(你好好想想最近的操作,故障不会无缘无故的发生吧,有问题请追问我)。 建议你下载windows清理助手查杀恶意软件和木马(请搜索下载,不要用360卫士替代):下载360系统急救箱扫描系统1、请你用系统自带的系统还原,还原到你没有出现这次故障的时候修复(或用还原软件进行系统还原,如果进不了系统,开机按F8进入安全模式还原系统)。 2、如果故障依旧,使用系统盘修复,打开命令提示符输入SFC /SCANNOW 回车(SFC和/之间有一个空格),插入原装系统盘修复系统,系统会自动对比修复的。 3、如果故障依旧,在BIOS中设置光驱为第一启动设备插入原装系统安装盘按R键选择“修复安装”即可。 4、如果故障依旧,建议重装操作系统。 使用系统自带的系统还原的方法:系统自带的系统还原:“开始”/“程序”/“附件”/“系统工具”/“系统还原”,点选“恢复我的计算机到一个较早的时间”,按下一步,你会看到日期页面有深色的日期,那就是还原点,你选择后,点击下一步还原(Win7还原系统,在控制面板然后设备和安全子选项然后备份和还原子选项)。

里氏替换原则与依赖倒置原则有什么区别

区别:1. 定义不同:里氏替换原则是关于子类与父类的原则;依赖倒置原则是关于抽象与细节的原则。 2. 应用范围不同:依赖倒置原则的应用范围比里氏替换原则更广泛。 3. 涉及的对象关系不同:里氏替换原则中的子类具有自己的独立性;依赖倒置原则中的细节依赖于抽象。 衍生知识点:一、里氏替换原则定义1:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。 定义2:所有引用基类的地方必须能透明地使用其子类的对象。 通俗来讲:子类可以扩展父类的功能,但不能改变父类原有的功能。 是OCP的扩展。 它包含以下四层含义:1.子类可以实现父类的抽象,但不能覆盖父类的非抽象方法2.子类中可以增加自己特有的方法3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入更宽松4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类的更严格二、依赖倒置原则定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。 这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。 解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B和类C发生联系,则会大大降低修改类A的几率。 核心思想:面向接口编程。 含有下面3点:1.低层模块尽量都要有抽象类或接口,或者两者都有2.变量的声明类型尽量使抽象类或接口3.用继承时遵循里氏替换原则

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: C

“深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)” 的相关文章

深化探求模板编程的精华-从类型参数到智能推导-模板的艺术-C-把握 (深化探求模板范文)

深化探求模板编程的精华-从类型参数到智能推导-模板的艺术-C-把握 (深化探求模板范文)

类型模板参数 在示例中,模板有一个模板参数:存储在网格中的类型。编写类模板时,您须要在尖括号内指定参数列表,例如: 这个参数列表相似于函数或方法中的参数列表。与函数和...

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

当天咱们将深化讨论C++中的多线程编程,提醒多线程如何解锁性能后劲,提高程序的并发性能。 什么是多线程? 在计算机迷信中,多线程是指一个进程(程序的口头实例)中的多个线程同时口头。每个...

提升性能的新利器-17中的并行功能-C (提升 性能)

提升性能的新利器-17中的并行功能-C (提升 性能)

C++17扩展了STL(Standard Template Library,标准模板库)以支持并行算法。这意味着许多常见的算法,如std::sort、std::for_each、std::tran...

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。 ThreadPool 一个简单...

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

让新手也能轻松把握-C-类模板特化与承袭经常使用指南 (请问新手)

一、类模板特化 1.特化的成功 你可以为特定类型提供类模板的替代成功。例如,你或许以为constchar类型(C格调字符串)的Grid行为没无心义。Grid<constchar&...

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

C工具 变长参数列表 这局部解释了旧的C格调变长参数列表。了解这些内容很关键,由于你或许会在遗留代码中遇到它们。但是,在新代码中,你应该经常使用变参模板来成功类型安保的变长参数列表。...

的区别-中-C-math.h-和-cmath (的区别中的钱)

的区别-中-C-math.h-和-cmath (的区别中的钱)

一、引言 C++规范库中的<cmath>和C言语规范库中的<math.h>均为数学函数库,它们提供了一系列数学函数和常量。但是,这两者之间存在一些关键的区别...