相关疑难解决方法(0)

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

我从许多来源读到这个volatile关键字 在多线程场景中没有帮助 .但是,这个断言一直受到接受指针的原子操作函数的挑战.volatile

例如,在Mac OS X上,我们有OSAtomic函数系列:

SInt32 OSIncrementAtomic(volatile SInt32 *address);
SInt32 OSDrecrementAtomic(volatile SInt32 *address);
SInt32 OSAddAtomic(SInt32 amount, volatile SInt32 *address);
// ...
Run Code Online (Sandbox Code Playgroud)

似乎volatileWindows 上的关键字类似于Interlocked操作:

LONG __cdecl InterlockedIncrement(__inout LONG volatile *Addend);
LONG __cdecl InterlockedDecrement(__inout LONG volatile *Addend);
Run Code Online (Sandbox Code Playgroud)

似乎在C++ 11中,原子类型具有volatile修饰符的方法,它必须以某种方式表示volatile关键字与原子性有某种关系.

那么,我错过了什么?为什么操作系统供应商和标准库设计者坚持使用volatile关键字进行线程化,如果它没用?

c atomic volatile

28
推荐指数
2
解决办法
3350
查看次数

MacOSX:OSAtomic与OSAtomicBarrier

对于这里的功能:

#include <libkern/OSAtomic.h>
Run Code Online (Sandbox Code Playgroud)

有OSAtomic和OSAtomicBarrier版本.

但是,文档未显示以下示例代码:

  1. 什么时候安全使用OSAtomic,没有OSAtomicBarrier版本
  2. 什么时候这OSAtomic将是不安全的,但OSAtomicBarrier将是安全的.

谁能提供解释+样本代码?

[没有实际代码的"你的意见"的随机漫游是没用的.读者:请投下这样的答案; 并用实际代码充满活力地回答.]

[C/C++代码首选; 大会也好.]

macos

11
推荐指数
1
解决办法
2933
查看次数

标签 统计

atomic ×1

c ×1

macos ×1

volatile ×1