【C】volatile 关键字

这篇具有很好参考价值的文章主要介绍了【C】volatile 关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

volatile

1)基本概念

const是C语言的一个关键字。

const用于告诉编译器相应的变量可能会在程序的控制之外被修改,因此编译器不应该对其进行优化。

声明语法:

volatile int A;

作用:

  • 防止编译器优化,确保对变量的每次访问都是实际的读写操作,而不是使用缓存中的值。
  • 用于表示可能会被异步修改的变量,如硬件寄存器、中断服务程序中的共享变量等。

2)用途:禁止编译器优化

在学习这个知识点前,需要大概了解下代码运行的实质

对于一个简单的乘法运算a = a * b

在RISC中要使用4条汇编指令:

① 读内存中的a

② 读内存中的b

③ 在CPU中计算a*b

④ 把结果写回内存

【C】volatile 关键字,c语言,开发语言,嵌入式,学习总结

问题:正常流程是上面的四步,但是,编译器可能会对变量的读写进行优化,例如将变量A缓存在CPU自己的寄存器中,下次使用的时候直接读CPU寄存器中的A,而不去读内存中的A,但内存中的A可能已经发生了变化,这样可能导致无法正确地捕捉到变量的实际变化。

为了解决这种问题,用volatile 去修饰Avolatile int A; 就可以禁止编译器优化,确保对变量的每次访问都是实际的读写操作。

这种BUG一般发生在多线程环境中,全局变量等共享量,没有管理好。

3)总结

volatile 的使用需要谨慎,特别是在多线程编程中,建议使用专门设计用于同步的机制来保障正确性。

volatile 不能替代更强大的同步手段,如互斥锁、原子操作等。文章来源地址https://www.toymoban.com/news/detail-813643.html

到了这里,关于【C】volatile 关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【多线程】volatile关键字

    一、volatile 1.volatile的底层原理是内存屏障,Memory Barrier, Memory Fence 2.对volatile变量的写指令(赋值操作)后会加入写屏障 3.对volatile变量的读指令(取变量值)前会加入读屏障 4.写屏障的作用会将写屏障之前的赋值改动操作,对共享变量的改动都同步到主内存中 5.读屏障的作

    2024年02月06日
    浏览(32)
  • 【C】volatile 关键字

    1)基本概念 const 是C语言的一个。 const 用于告诉编译器相应的变量可能会在程序的控制之外被修改,因此编译器不应该对其进行优化。 声明语法: 作用: 防止编译器优化,确保对变量的每次访问都是实际的读写操作,而不是使用缓存中的值。 用于表示可能会 被异步

    2024年01月22日
    浏览(36)
  • JAVA volatile 关键字

    volatile 是JAVA虚拟机提供的轻量级的同步机制,有三大特性 1、保证可见性  2、不保证原子性  3、禁止指令重排 JMM  JAVA内存模型本身是一种抽象的概念并不真实存在 它描述的是一组规则或规范,提供这组规范定义了程序中各个变量(包括实例变量、静态变量)的访问方式。

    2024年02月13日
    浏览(36)
  • [JAVAee]volatile关键字

    目录 1.volatile的特性 ①保持线程可见性 2.volatile注意事项及适用场景 ①注意事项 ②适用场景 volatile,译为\\\"易变的\\\". 对此我们就可以这样理解,对于被volatile修饰的变量的数值,是容易变化的. 在之前的线程安全文章中,我们有讲解过\\\"可见性\\\",对于线程间的这个特性可能会导致:线程

    2024年02月16日
    浏览(28)
  • 【Java基础】volatile关键字

    关于作者:CSDN内容合伙人、技术专家, 从零开始做过日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习Java基础知识,温故知新。 volatile 是一个Java,可以用来修饰变量,volatile也被称为轻

    2024年02月11日
    浏览(32)
  • volatile关键字(轻量级锁)

    目录 一、volatile出现背景 二、JMM概述 2.1、JMM的规定  三、volatile的特性 3.1、可见性  3.1.1、举例说明  3.1.2、总结 3.2、无法保证原子性 3.2.1、举例说明 3.2.2、分析 3.2.3、使用volatile对原子性测试  3.2.4、使用锁机制  3.2.5、总结 3.3、禁止指令重排序  四、volatile的内存语义 4

    2024年02月15日
    浏览(31)
  • 浅析Java中volatile关键字

            Java中的volatile用于修饰一个变量,当这个变量被多个线程共享时,这个变量的值如果发生更新,每个线程都能获取到最新的值。volatile在多线程环境下还会禁止指令重排序,确保变量的赋值操作按照代码的顺序执行。需要注意是它不能保证变量操作的

    2024年01月21日
    浏览(37)
  • Java中的volatile关键字实现原理

    在并发编程中,线程之间的可见性问题是非常重要的一项难题。Java中提供了一种解决并发可见性问题的机制,即volatile。 在本文中,我们将会讲解Java中volatile的实现原理,为什么它能够保证可见性,以及背后的实现原理涉及到的内存屏障和JVM屏障等内容。在学习

    2023年04月27日
    浏览(34)
  • 多线程系列(四) -volatile关键字使用详解

    在上篇文章中,我们介绍到在多线程环境下,如果编程不当,可能会出现程序运行结果混乱的问题。 出现这个原因主要是,JMM 中主内存和线程工作内存的数据不一致,以及多个线程执行时无序,共同导致的结果。 同时也提到引入 synchronized 同步锁,可以保证线程同步,让多

    2024年02月21日
    浏览(49)
  • C/C++ 中 volatile 关键字详解

    转载自菜鸟教程【C/C++ 中 volatile 详解 | 菜鸟教程】 1、为什么用volatile? C/C++ 中的 volatile 和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 \\\"The C++ Programming Language\\\" 对 volatile 修饰词的说明: A volatile specifier is a hint to a compiler that an ob

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包