volatile 相关问题

Volatile是一个限定符,用于定义“可以自行更改”的数据存储区域(对象,字段,变量,参数),从而禁止某些代码生成器优化。在某些但不是所有识别此限定符的语言中,对此类数据的访问是线程安全的。

如何将易失性 typedef 结构转换为非易失性 typedef 结构作为函数的参数

我正在为STM32编写C库并遇到问题。 我有 typedef 结构: typedef 结构体 foo { // 一些结构体元素 } foo; foo 类型的易失性变量: 易失性 foo 栏; 而且很有趣...

回答 1 投票 0

“双”原子的 Volatile.Read / Volatile.Write 是吗?

MSDN 指出: 其他类型(包括 long、ulong、double 和decimal)以及用户定义类型的读取和写入不需要是原子的。 C# 7.0 规范草案 - 变量 - 9.6 Atom...

回答 2 投票 0

JMM规格示例

我已阅读 Jmm 规范的 17.4.5 文章,我对这个示例有疑问。 线程 1;线程2; B=1; A = 2; r2=A; r1=B; 作者写道 r2 和 r1 可以等于 0,因为

回答 1 投票 0

使用易失性存储器的 OpenCL 内核通信

我正在尝试让两个 OpenCL 内核相互通信。 A 工作内核运行一个循环,控制内核向其提供作业并告诉 当它完成时。我正在使用易失性设备缓冲区

回答 1 投票 0

如何告诉编译器抛出错误,因为变量未声明为“易失性”,但在中断处理程序中使用?

如果那些不打算注册或优化的变量仅在外部事件(嵌入式域中的中断内)内修改,我们需要将它们声明为易失性。 uint8_t ...

回答 1 投票 0

易变变量

易失性变量存储在程序存储器的什么位置(在哪个部分)?

回答 7 投票 0

需要澄清 java 易失性关键字的行为

我一直在阅读有关“易失性”关键字的内容,因为我们的应用程序充满了这种类型的变量。这是很多年前完成的,现在回顾它我想确认一些观点。作为一个

回答 1 投票 0

如何避免在易失性类中重复方法

假设我有以下非常简单的课程: A级 { 民众: 静态 constexpr A make() { return A{}; } constexpr A() : _v(0) {} constexpr A& setV(int v) { _v = v;返回*这...

回答 2 投票 0

gcc 是否优化了我的等待代码,尽管将其标记为易失性?

在 ST32 ARM Cortex M4 上,我有一个简单的裸机闪烁灯,可以使 LED 闪烁。当我使用旋转等待时它工作正常: typedef 易失性 uint32_t vuint32_t; #define SET(地址, 位) (*((vuint32_t*) (

回答 1 投票 0

关于C中的volatile关键字的解释

有人可以给我解释一下这一行中第二个 volatile 关键字的使用吗 易失性无符号整数 * 易失性缓冲区; 我知道 volatile 关键字通常用来表示 t...

回答 2 投票 0

在具有中断的循环缓冲区中使用易失性

在实现循环缓冲区时,我正在努力正确使用 volatile 关键字。该缓冲区在 ISR 中写入并在主程序中读取。我正在运行裸机微控制器...

回答 1 投票 0

在内核运行时将设备全局内存复制到固定主机内存时会出现永久过时的值

我有一个在后台运行半无限循环的内核(只要全局哨兵值为真,while 循环就会运行)。这是一个接近最小示例的东西,有一些行和......

回答 0 投票 0

使用人工神经网络估计波动率[关闭]

我想使用人工神经网络进行波动率估计,但我不知道如何学习它的过程。我对 Python 和 Matlab 的了解有限。你能推荐一个博...

回答 0 投票 0

为什么 JDK11 的 ConcurrentHashMap 不需要 tabAt 和 setTabAt 方法中的 volatile 语义?

在JDK8的ConcurrentHashMap中,tabAt和setTabAt这两个方法都需要volatile语义。 static final Node tabAt(Node[] tab, int i) { 返回(节点 在JDK8的ConcurrentHashMap中,tabAt和setTabAt这两个方法都需要volatile语义。 static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { return (Node<K,V>)U.getObjectVolatile(tab, ((long)i << ASHIFT) + ABASE); } static final <K,V> void setTabAt(Node<K,V>[] tab, int i, Node<K,V> v) { U.putObjectVolatile(tab, ((long)i << ASHIFT) + ABASE, v); } 作者评论说: Note that calls to setTabAt always occur within locked regions, and so in principle require only release ordering, not full volatile semantics, but are currently coded as volatile writes to be conservative. 那么在JDK11的ConcurrentHashMap中,tabAt和setTabAt这两个方法都不需要volatile语义,而是使用acquire和release语义。 static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { return (Node<K,V>)U.getObjectAcquire(tab, ((long)i << ASHIFT) + ABASE); } static final <K,V> void setTabAt(Node<K,V>[] tab, int i, Node<K,V> v) { U.putObjectRelease(tab, ((long)i << ASHIFT) + ABASE, v); } 作者评论说: Note that calls to setTabAt always occur within locked regions, and so require only release ordering. 据我所知,数组Node<K,V>[] tab的元素不是volatile。仅使用获取和释放语义不能保证可见性。获取元素的线程不能立即看到设置元素的线程所做的更新。 即使对setTabAt 的调用总是发生在锁定区域内,似乎也没有任何区别。因为对 tabAt 的调用并不总是发生在锁定区域内,所以没有 happends-before 关系。 对tabAt的调用不在方法的锁定区域内发生get public V get(Object key) { Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek; int h = spread(key.hashCode()); if ((tab = table) != null && (n = tab.length) > 0 && (e = tabAt(tab, (n - 1) & h)) != null) { if ((eh = e.hash) == h) { if ((ek = e.key) == key || (ek != null && key.equals(ek))) return e.val; } else if (eh < 0) return (p = e.find(h, key)) != null ? p.val : null; while ((e = e.next) != null) { if (e.hash == h && ((ek = e.key) == key || (ek != null && key.equals(ek)))) return e.val; } } return null; } 不知道是不是我的理解有问题。谁能提供更多相关信息? 任何帮助将不胜感激。

回答 0 投票 0

C++20 中有关 volatile 的 GLM 库弃用警告

许多使用 volatile 的操作在 c++20 中被弃用(参见 https://en.cppreference.com/w/cpp/language/cv) 所以……当我在我的项目中使用非常流行的 glm 库(https://github.com/g-truc/glm)时,我……

回答 0 投票 0

我是否需要在 C# 中使用 volatile 来使用 async/await 来处理可变对象字段?

我看到了很多关于这方面的问题(例如 https://stackoverflow.com/a/54413147/1756750 ,或 https://stackoverflow.com/a/55139219/1756750 ),但不幸的是我没有在...中找不到任何东西

回答 1 投票 0

带有输入/输出操作数的内联 asm 以更新指针并更新它指向的内容

我正在使用 RISC-V 汇编语言和 GNU C 内联汇编实现 3*3 矩阵和 3*1 矩阵乘法。 // 描述:矩阵相乘两级for循环 #include 内...

回答 0 投票 0

3*3矩阵和3*1矩阵乘法使用risc-v汇编语言[重复]

// 描述:矩阵乘以两层 for 循环 #include 主函数() { int f,i=0; int h[9]={0}, x[3]={0}, y[3]={0}; 文件 *input = fopen("../input/...

回答 0 投票 0

teradata sql volatile table - case 语句

Create volatile table sample as (选择 a.orig_name , a.sample_date, CASE when a.orig_name = 'Apl' THEN 'APPLE' 当 a.orig_name = 'Orng' 然后 'ORANGE' 否则'其他' 以 orig_name_grp 结尾 从表...

回答 0 投票 0

如果线程仅在持有互斥量时使用它,共享变量是否需要可变? [重复]

在 Java 语言规范中的 Java 内存模型 (JMM) 中,如果线程 A 写入一个字段然后解锁互斥量,则写入“发生在”解锁之前。这意味着两个线程

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.