/forceInterlockedFunctions

在运行时根据 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 编译器选项

  1. 打开项目的“属性页”对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”“C/C++”>“命令行”属性页>

  3. Additional options (其他选项 ) 框中,添加 /forceInterlockedFunctions 以启用。 选择“确定”以保存更改 。

以编程方式设置此编译器选项

另请参阅

Arm64 内部函数
MSVC 编译器选项
MSVC 编译器命令行语法