深化剖析-atomic-代码范例和实践运行-std-现代-中的原子-C (深化剖析整改)
一、引言
在并发编程中,原子操作是一种无法终止的操作,即在多线程环境中,一旦开局就不会被其余线程搅扰。C++11引入了std::atomic库以支持原子操作,为并发编程提供了更为方便和高效的模式。本文将深化讨论现代C++中的原子操作及其关系概念,并经过代码示例展现其运行。
二、std::atomic的基本概念
std::atomic是C++规范库中的一个模板类,用于封装数据类型并为其提供原子操作。这些操作在多线程环境中是安保的,即它们不会被其余线程终止。经过经常使用std::atomic,开发者可以确保数据在多线程环境中的分歧性和正确性。
三、std::atomic的关键配置
![深化剖析](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
四、代码示例与解说
以下是一个经常使用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.用继承时遵循里氏替换原则
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。