草庐IT

volatile-qualifier

全部标签

c++ - 为什么 std::atomic<bool> 比 volatile bool 慢得多?

多年来我一直在使用volatilebool进行线程执行控制,效果很好//inmyclassdeclarationvolatileboolstop_;-----------------//Inthethreadfunctionwhile(!stop_){do_things();}现在,由于C++11增加了对原子操作的支持,我决定尝试一下//inmyclassdeclarationstd::atomicstop_;-----------------//Inthethreadfunctionwhile(!stop_){do_things();}但它比volatilebool慢几个数量级!我编

c++ - 带有空主体的while循环检查 volatile 整数-这是什么意思?

我正在查看具有以下几行的C++类:while(x>y);returnx-y;x和y是volatileint类型的成员变量。我不明白这个结构。我在这里找到了代码stub:https://gist.github.com/r-lyeh/cc50bbed16759a99a226.我猜它不能保证正确甚至有效。 最佳答案 自从x和y已被声明为volatile,程序员希望它们会从程序外部进行更改。在这种情况下,您的代码将保留在循环中while(x>y);并将返回值x-y从外部更改值后,x.在您告诉我们更多有关您的代码以及您在哪里看到它之后,可以猜

c++ - 没有 volatile 的互斥锁功能是否足够?

我和一位同事为在x86、x64、Itanium、PowerPC和其他10年前的服务器CPU上运行的各种平台编写软件。我们刚刚讨论了pthread_mutex_lock()...pthread_mutex_unlock()等互斥函数本身是否足够,或者protected变量是否需要为volatile。intfoo::bar(){//...//codewhichmayormaynotaccess_protected.pthread_mutex_lock(m);intret=_protected;pthread_mutex_unlock(m);returnret;}我关心的是缓存。编译器能否将

C++ volatile 成员函数

classMyClass{intx,y;voidfoo()volatile{//dostuffwithx//dostuffwithy}};我需要将x和y声明为volatile还是将所有成员变量都视为volatile自动?我想确保编译器不会将“带有x的东西”重新排序为“带有y的东西”。编辑:如果我将普通类型转换为volatile类型会发生什么?这会指示编译器不要重新排序对该位置的访问吗?我想在特殊情况下将普通变量传递给参数为volatile的函数。我必须确保编译器不会通过之前或之后的读写重新排序该调用。 最佳答案 标记一个成员函数vo

c++ - 这个错误是什么意思: "error: expected specifier-qualifier-list before ' type_name'"?

我一直在研究Cell处理器,我正在尝试创建一个包含spe_context_ptr_t的结构,该结构将在线程中用于启动spe上下文,并且还将包含一个指向其他东西的指针,它将从线程内传递给spu上下文(目前我试图让它成为一个通用指针,但实际上它将是一个指向我定义的另一个结构的指针)。当我尝试编译时,出现以下错误:spu/../common.h:38:error:expectedspecifier-qualifier-listbefore'spe_context_ptr_t'//hereistheoffendingline(s)typedefstruct_PTHREAD_BLOCK{spe_

c++ - 什么是qualified-id/name 和unqualified-id/name?

我想知道是否有人可以解释这些术语,因为我在很多地方都遇到过它们。我知道一些关于它们的基本理论,但不确定我所知道的是对还是错。那么谁能解释一下这些术语? 最佳答案 限定名称是具有某种指示其所属位置的名称,例如类规范、命名空间规范等。非限定名称是没有限定的名称。在此处阅读JamesMcNellis的回答:Whatisanestednamespecifier?给定:structA{structB{voidF();};};A是一个unqualified-id。::A是qualified-id但没有nested-name-specifier。

go - Go 是否支持 volatile /非 volatile 变量?

我是这门语言的新手,所以请耐心等待。我很好奇GO如何处理线程可用的数据存储,因为非局部变量也可以是非volatile的,例如在Java中。GO有channel的概念,从本质上讲——线程间通信,意味着它绕过处理器缓存,直接读/写到堆。另外,在golang文档中没有找到任何对volatile的引用。 最佳答案 TL;DR:Go没有关键字可以让多个goroutine安全地写入/读取变量。为此,请使用sync/atomic包。或者更好Donotcommunicatebysharingmemory;instead,sharememorybyc

java - 你什么时候在 Java 中使用 volatile 关键字?

这个问题在这里已经有了答案:Whatisthevolatilekeywordusefulfor?(25个回答)Whatisthe"volatile"keywordusedfor?(8个回答)关闭3年前。我已阅读“Whentouse'volatile'inJava?”,但我仍然感到困惑。我如何知道何时应该将变量标记为volatile?如果我弄错了,要么在需要它的东西上省略volatile,要么在不需要的东西上添加volatile怎么办?在确定多线程代码中哪些变量应该是volatile时,有哪些经验法则? 最佳答案 当你想让一个成员变量

java - volatile 与原子性

这个问题在这里已经有了答案:Whatisthedifferencebetweenatomic/volatile/synchronized?(7个回答)关闭9年前。我在下面的某处读到。Javavolatilekeyworddoesn'tmeansatomic,itscommonmisconceptionthatafterdeclaringvolatile,++operationwillbeatomic,tomaketheoperationatomicyoustillneedtoensureexclusiveaccessusingsynchronizedmethodorblockinJav

Java volatile 引用与 AtomicReference

如果我只使用get()和set()-来自AtomicReference的方法? 最佳答案 简短的回答是:不。来自java.util.concurrent.atomic包文档。引用:Thememoryeffectsforaccessesandupdatesofatomicsgenerallyfollowtherulesforvolatiles:gethasthememoryeffectsofreadingavolatilevariable.sethasthememoryeffectsofwriting(assigning)avolat