当前位置:首页 > 科技  > 软件

C++ 里 ++i 是原子操作吗?

来源: 责编: 时间:2023-09-20 21:55:02 368观看
导读1.什么是原子操作在多线程环境下,原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。原子操作可以确保某些特定操作在多线程条件下,

1.什么是原子操作

在多线程环境下,原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。6Hp28资讯网——每日最新资讯28at.com

原子操作可以确保某些特定操作在多线程条件下,不会由于线程切换而导致数据污染。比如,对一个变量的读/写操作,就是一个常见的需要原子化的场景。如果把这样的读/写操作设计成原子操作,就可以避免多线程竞争导致的数据不一致问题。6Hp28资讯网——每日最新资讯28at.com

6Hp28资讯网——每日最新资讯28at.com

2.++i 是否原子操作

在 C++ 中,对一个变量的自增(++)操作看似很简单,理论上它包含:6Hp28资讯网——每日最新资讯28at.com

  • 读变量原值
  • 对原值加 1
  • 将结果写回变量

例如:6Hp28资讯网——每日最新资讯28at.com

int i = 0; ++i;

但是在多线程环境下,这三个步骤如果被打断,可能导致如下结果:6Hp28资讯网——每日最新资讯28at.com

  • 线程1 读到i=0
  • 线程2也读到i=0
  • 线程1对i加1并写入,现在i=1
  • 线程2对i加1并写入,这时覆盖了线程1的写入,又使得i=1

很明显,实际的运行次数是2次,但最终结果是i=1,这就是数据污染的例子。6Hp28资讯网——每日最新资讯28at.com

为了避免上述情况,C++编译器在编译过程中,会自动将一些看似简单的操作(例如自增操作)转换为原子指令,从而保证其原子性。6Hp28资讯网——每日最新资讯28at.com

这种特性与具体的编译器实现相关,比如主流的GNU编译器和MSVC编译器都对自增操作进行了优化,确保其原子执行。6Hp28资讯网——每日最新资讯28at.com

所以可以认为,在绝大多数C++实现中,++i这个自增操作是原子的。但是仍有一些例外情况需要注意,比如在嵌入式平台上可能需要开发者显式指定操作的原子性。6Hp28资讯网——每日最新资讯28at.com

3. 如何保证操作的原子性

在不能依赖编译器优化的情况下,C++11提供了一些方法可以保证操作的原子性:6Hp28资讯网——每日最新资讯28at.com

(1) atomic类型:提供了一些原子类型,对其操作天然原子6Hp28资讯网——每日最新资讯28at.com

int i = 0; ++i;

(2) mutex:使用mutex可以在临界区内执行一个原子块6Hp28资讯网——每日最新资讯28at.com

std::mutex m;m.lock();// critical sectioncnt++; m.unlock();

(3) lock-free编程:通过CAS(compare-and-swap)等原子指令实现非阻塞同步6Hp28资讯网——每日最新资讯28at.com

atomic_int val;int expect = val.load();while(!val.compare_exchange_weak(expect, expect + 1)) {  expect = val.load(); } atomic_int val;int expect = val.load();while(!val.compare_exchange_weak(expect, expect + 1)) {  expect = val.load(); }

4. 总结

综上所述,在大多数普通的桌面程序和服务端程序中,++i这样的自增操作可以看作是原子的,编译器会做出优化。但是对于嵌入式开发等要求原子操作显式控制的场景,C++11提供了一些新的原子类型和同步原语来保证操作的原子执行。6Hp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10591-0.htmlC++ 里 ++i 是原子操作吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python小技巧:判断一个列表是否包含另一个列表的全部元素

下一篇: 单元测试的重要性:编写更安全、更可靠的代码

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、“Ringdoll戒之人形”淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top