Tag: 挥发物

C中的volatile int和C ++ 0x的std :: atomic 一样好吗?

我需要在我的程序中有primefaces变量。 以前我使用的是std::atomic ,但我现在正在使用的平台没有支持C ++ 0x的g ++编译器。 我使用了volatile int ,它似乎正在工作,因为我还没有在多核系统中遇到竞争条件,我正在测试它。 我的问题是volatile int是primefaces的,比如std::atomic吗? 此外,它是否会产生内存障碍(我也需要)?

如果volatile对于线程无用,为什么primefaces操作需要指向易失性数据?

我从许多来源读到, volatile关键字 在multithreading场景中 没有帮助 。 但是,这个断言一直受到接受volatile指针的primefaces操作函数的挑战。 例如,在Mac OS X上,我们有OSAtomicfunction系列: SInt32 OSIncrementAtomic(volatile SInt32 *address); SInt32 OSDrecrementAtomic(volatile SInt32 *address); SInt32 OSAddAtomic(SInt32 amount, volatile SInt32 *address); // … 似乎在Windows上对于Interlocked操作有类似的volatile关键字用法: LONG __cdecl InterlockedIncrement(__inout LONG volatile *Addend); LONG __cdecl InterlockedDecrement(__inout LONG volatile *Addend); 似乎在C ++ 11中,primefaces类型具有使用volatile修饰符的方法,这必然意味着volatile关键字与primefaces性具有某种关系。 那么,我错过了什么? 为什么操作系统供应商和标准库设计者坚持使用volatile关键字进行线程化,如果它没用?