volatile相关内容

GCC 11.1中对易失性的非一致性优化

在写关于编译器必须如何处理volatile的答案时,我相信我可能无意中发现了GCC的错误,希望有人在我报告它之前进行验证。 我写了一个简单的函数,如下所示: int foo (int a, int b, int c) { b = a + 1; c = b + 1; a = c + 1; return a; } 如果没有优化,这会导致大量毫无意义的数据来回移动。通过优 ..
发布时间:2022-06-11 23:28:01 其他开发

Volatile关键字&线程本地内存

我对Java中volatile关键字的用法感到困惑。我在网上看了很多文章,但还是一无所获。我脑子里有很多问题想问: 首先,Wikipedia和许多博客都说,所有volatile变量都存储在线程本地内存中,而不是所有线程共享的主内存中!我有点困惑,他们是指stack memory吗?我知道每个线程都有自己的stack memory,它在其中存储自己的基元文字和对象引用。 如果是,那么如果vo ..
发布时间:2022-02-25 20:46:47 Java开发

为什么 volatile 在多线程 C 或 C++ 编程中没有用?

正如我最近发布的这个答案中所示,我似乎对 volatile 在多线程编程上下文中的实用性(或缺乏实用性)感到困惑. 我的理解是:任何时候一个变量可能在一段代码访问它的控制流之外被改变,这个变量应该被声明为volatile.信号处理程序、I/O寄存器、被另一个线程修改的变量都构成了这种情况. 因此,如果您有一个全局 int foo,并且 foo 由一个线程读取并由另一个线程以原子方式设置 ..
发布时间:2022-01-30 16:09:11 C/C++开发

何时在多线程中使用 volatile?

如果有两个线程访问一个全局变量,那么许多教程都说使变量 volatile 以防止编译器将变量缓存在寄存器中,从而无法正确更新.然而,两个线程都访问一个共享变量是需要通过互斥锁进行保护的东西,不是吗?但是在这种情况下,在线程锁定和释放互斥锁之间,代码处于一个关键部分,只有一个线程可以访问变量,在这种情况下,变量不需要是易失的? 那么,多线程程序中 volatile 的用途/目的是什么? ..
发布时间:2022-01-30 16:01:39 C/C++开发

在 C 中哪里都可以使用 volatile 关键字

我知道 volatile 关键字会阻止编译器优化变量并在读取时从内存中读取它.除了内存映射寄存器,还有哪些情况需要我们使用 volatile?给定一个符合标准的编译器,我是否必须在两种情况下都将 test_var 声明为 volatile? 1. 在file1.c中 int test_var=100;无效函数1(){测试变量++;} 在file2.c中 extern int te ..
发布时间:2022-01-25 12:37:52 其他开发

易失性成员变量与易失性对象?

我正在尝试在下面的“MpscQueue.h"中的嵌入式目标上实现一个多生产者(通过中断)、单个消​​费者(通过应用程序线程)队列. 我想知道是否可以安全地删除下面的一些 volatile 用法(请参阅内联问题).我还会考虑使用 volatile std::array 代替下面显示的 C 风格 buffer_[],但我不确定我是否可以相信它的实现与下面的意图.第三种选择是将 MpscQueue ..
发布时间:2022-01-25 12:36:01 C/C++开发

如何在删除键时安全地迭代 lua 表

在我的主协程中,我根据用户操作从表中删除或添加条目.在后台,我想遍历表中的条目.如果我错过了一次迭代中的插入,我不介意,只要我能在下一次之前抓住它. 使用 pairs 对其进行迭代是否安全?还是应该使用 next 代替? 解决方案 您可以在遍历表时安全地删除条目,但不能创建新条目,即新键.不过,您可以修改现有条目的值.(删除条目是该规则的特例.) ..
发布时间:2022-01-24 11:56:06 其他开发

使用 volatile 关键字修改 const 变量

我在回答 问题 并制作了这个测试程序. #include 主函数(){易失性常量 int v = 5;int * a = &v;*a =4;printf("%d\n", v);返回0;} 如果没有 volatile 关键字,代码会优化(使用 -O3 apple clang 4.2 编译)var 的变化,它按预期工作并且 const 变量被正确修改. 我想知道一个更有经验 ..
发布时间:2022-01-24 00:05:27 其他开发

什么时候需要 const volatile 对象?

什么时候在 C++ 中需要 const volatile 对象? 注意: 我确实理解 pointers 到 const volatile 内存位置的需要,但这些不需要对象本身const 或 volatile. 我问的是某些 const volatile 类型的 它们自己 的对象,例如: const volatile T obj; 这些在哪些情况下是必要的或有用的? 解决方案 在 ..
发布时间:2022-01-24 00:04:49 C/C++开发

为什么 volatile 局部变量的优化与 volatile 参数不同,为什么优化器会从后者生成无操作循环?

背景 这是受此问题/答案和评论中随后讨论的启发:“易失性"的定义是这种易失性还是GCC 有一些标准合规性问题?.根据其他人和我对应该发生的情况的解释,正如评论中所讨论的,我已将其提交给 GCC Bugzilla:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71793 其他相关回复也欢迎. 此外,该线程已经引起了这个问题:Does acces ..
发布时间:2022-01-23 20:41:40 C/C++开发

java变量本身是线程安全的吗?更新变量时?

假设我有两个线程更新一个对象,一个线程不同步地从该对象读取.显然,这是运行条件.但是,我想知道变量本身是否只能部分写入. 公共类 CommonObject 扩展 Object{静态 int memberVar=-1;}公共类 Input1Thread 扩展 Thread{公共无效运行(){而(真)CommonObject.memberVar = 1}}公共类 Input2Thread 扩展 Th ..

volatile 变量作为函数的参数

拥有此代码: typedef volatile int COUNT;COUNT functionOne( COUNT *number );int functionTwo( int *number ); 我无法摆脱一些警告.. 我在 functionOne 原型中收到此警告 1 [警告] 类型限定符被忽略函数返回类型 我得到这个警告 2,无论我用 COUNT pointer 参 ..
发布时间:2022-01-21 22:01:10 其他开发

C# bool 是原子的,为什么 volatile 有效

在 C# 中,我们知道 bool 是原子的 - 那么为什么将其标记为 volatile 是有效的?两者有什么区别,什么是好的(甚至实用的)用例? bool _isPending; 对比 volatile bool _isPending;//这是现实的还是疯狂的? 我已经阅读了 here 和这里,我正在努力确保我完全理解两者的内部运作.我想了解何时使用一个与另一个比较合适,或者仅 bool ..
发布时间:2022-01-19 17:28:30 C#/.NET

易失性布尔值与原子布尔值

AtomicBoolean 做了哪些 volatile boolean 无法实现的功能? 解决方案 它们完全不同.考虑这个 volatile 整数的例子: 易失性 int i = 0;无效incIBy5(){我+= 5;} 如果两个线程同时调用该函数,则 i 之后可能为 5,因为编译后的代码将与此有些相似(除了您无法在 int 上同步): void incIBy5() {国际温度;同 ..
发布时间:2022-01-19 16:50:07 Java开发

__asm__ __volatile__ 的工作(“":::“内存")

__asm__ __volatile__ () 的基本作用以及 "memory" 对于 ARM 架构的意义是什么? 解决方案 asm volatile("" ::: "memory"); 创建编译器级别的内存屏障,强制优化器不对跨屏障的内存访问重新排序. 例如,如果您需要以特定顺序访问某个地址(可能是因为该内存区域实际上是由不同的设备而不是内存支持的),您需要能够将这一点告诉编译器 ..
发布时间:2022-01-17 13:25:35 其他开发

互斥锁的存在是否有助于摆脱 volatile 关键字?

我有一个多 R/W 锁类,它保持读、写和挂起的读、挂起的写计数器.互斥体保护它们免受多个线程的影响. 我的问题是我们是否还需要将计数器声明为 volatile,以便编译器在进行优化时不会搞砸. 或者编译器是否考虑到计数器由互斥锁保护. 我了解互斥锁是一种用于同步的运行时机制,而“volatile"关键字是编译时指示编译器在进行优化时做正确的事情. 问候,-杰. 解决方 ..
发布时间:2022-01-17 08:36:55 C/C++开发