草庐IT

volatile

全部标签

java - Java 中的 volatile int 是线程安全的吗?

Java中的可变int是线程安全的吗?也就是说,它可以在不加锁的情况下安全地读写吗? 最佳答案 是的,您可以安全地对其进行读取和写入-但您不能执行任何复合操作,例如安全地递增它,因为这是一个读取/修改/写入循环。还有一个问题是它如何与对其他变量的访问进行交互。volatile的确切性质坦率地令人困惑(参见memorymodelsectionoftheJLSformoredetails)-我会个人通常使用AtomicInteger相反,作为一种更简单的方法来确保我做对了。 关于java-J

java - 为什么 java 5+ 中的 volatile 不能确保来自另一个线程的可见性?

根据:http://www.ibm.com/developerworks/library/j-jtp03304/Underthenewmemorymodel,whenthreadAwritestoavolatilevariableV,andthreadBreadsfromV,anyvariablevaluesthatwerevisibletoAatthetimethatVwaswrittenareguaranteednowtobevisibletoB并且互联网上的许多地方都声明以下代码不应该打印“错误”:publicclassTest{volatilestaticprivateinta

kotlin - 如何在 Kotlin 中使用 volatile

我尝试过这样的事情:privatevolatilevarinstanceState:InstanceState=InstanceState.startsError:'Expectedmemberdeclaration'像这样:privatevolatilevarinstanceState:InstanceState=InstanceState.startsError:'Propertygetterorsetterexpected'Kotlin不支持Volatile? 最佳答案 您可以使用@Volatile将属性标记为volatile

c++ - volatile struct = struct 不可能,为什么?

structFOO{inta;intb;intc;};volatilestructFOOfoo;intmain(void){foo.a=10;foo.b=10;foo.c=10;structFOOtest=foo;return0;}这不会编译,因为structFOOtest=foo;产生错误:error:bindingreferenceoftype'constFOO&'to'volatileFOO'discardsqualifiers如何在C++(C++11之前)中将volatilestruct复制到另一个struct中?很多人建议只删除volatile,但在这种情况下我不能这样做,因

c++ - 用于线程控制的 volatile bool 是否被认为是错误的?

根据我对thisquestion的回答,我开始阅读关键字volatile以及关于它的共识。我看到有很多关于它的信息,一些旧的现在看起来是错误的,还有很多新的说它在多线程编程中几乎没有位置。因此,我想澄清一个具体的用法(在SO上找不到确切的答案)。我还想指出,我确实了解编写多线程代码的一般要求以及为什么volatile不能解决问题。不过,我在我工作的代码库中看到使用volatile进行线程控制的代码。此外,这是我使用volatile关键字的唯一情况,因为所有其他共享资源都是正确的同步。假设我们有这样一个类:classSomeWorker{public:SomeWorker():isRun

c++ - 我什么时候在 C++ 中使用 const volatile、register volatile、static volatile?

我想知道volatile关键字与register、const和static结合的不同用途关键词。我不确定有什么影响,所以我认为:registervolatileintT=10;建议编译器将T存储在寄存器中,T的值可以从外部某处(操作系统、硬件、另一个线程)修改constvolatileintT=10;程序本身不能修改T,但是T可以在代码之外的地方修改。staticvolatileintT=10;如果T是类的数据成员,则意味着该类的所有对象都具有相同的T值,并且T可以从外部某处修改。如果T是文件中的全局变量,则其他文件(属于项目的一部分)中的源代码无法访问T,但可以从外部某处访问T。如果

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