在运行时根据 CPU 能力,在 Armv8.0 加载、存储独占指令或 Armv8.1 大型系统扩展 (LSE) 原子指令之间动态选择。
语法
]$
注解
在可能的情况下,此标志可避免使用 Armv8.0 load and store 独占指令,因为这些指令可能会导致活锁。 此标志强制将以下互锁内部函数生成为外部函数:
操作 | 8 | 16 | 32 | 64 | 128 | 指针 |
---|---|---|---|---|---|---|
添加 | 没有 | 没有 | 完全 | 完全 | 没有 | 没有 |
和 | 完全 | 完全 | 完全 | 完全 | 没有 | 没有 |
比较交易所 | 完全 | 完全 | 完全 | 完全 | 完全 | 完全 |
递减 | 没有 | 完全 | 完全 | 完全 | 没有 | 没有 |
交流 | 完全 | 完全 | 完全 | 完全 | 没有 | 完全 |
交易所添加 | 完全 | 完全 | 完全 | 完全 | 没有 | 没有 |
增量 | 没有 | 完全 | 完全 | 完全 | 没有 | 没有 |
或 | 完全 | 完全 | 完全 | 完全 | 没有 | 没有 |
异或 | 完全 | 完全 | 完全 | 完全 | 没有 | 没有 |
bittestandreset | 没有 | 没有 | 完全 | 完全 | 没有 | 没有 |
bittestandset | 没有 | 没有 | 完全 | 完全 | 没有 | 没有 |
密钥:
Full:支持 plain、
_acq
、_rel
_nf
和 forms。None:不支持
有关互锁内部函数的详细信息,请参阅 Arm64 内部函数中的“互锁内部函数”部分。
在 Visual Studio 中设置 /forceInterlockedFunctions
编译器选项
打开项目的“属性页”对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”“C/C++”>“命令行”属性页>。
在 Additional options (其他选项 ) 框中,添加
/forceInterlockedFunctions
以启用。 选择“确定”以保存更改 。
以编程方式设置此编译器选项
- 请参阅 AdditionalOptions。