gpt4 book ai didi

c - 使用 gcc 在 32 位模式下原子读/写 64 位值

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:16 26 4
gpt4 key购买 nike

gcc 是否有任何内在或其他方式说服它以原子方式执行 64 位读写而不是 2 个 32 位写入? (至少在一两个地方)。

目前我必须执行 __sync_lock_test_and_set__sync_fetch_and_add 以使其以原子方式执行读/写操作,但所讨论的 CPU 具有 64 位获取和存储指令.

我不想编写大量带有 #ifs 的内联汇编器(大概是我们必须支持的每个 CPU 一个)。

我目前使用的是 gcc 4.4.6,短期内不太可能升级。

最佳答案

如果您使用“long long”,内存访问将不是原子的。

然而,当使用 64 位 CPU 时(即使在 32 位程序中),“双重”内存访问可能是原子的:

union {
long long ll;
double d;
} u;

u.ll = my_value;
*(double *)&my_long_long_variable = u.d;

但是,如果此示例中的数字“my_value”将导致 u.d 的“信号 NaN”值,那么您在执行此操作时可能会遇到异常!

也许编译器甚至不会为这段代码使用 FPU 寄存器。在这种情况下,内存访问将不是原子的,并且需要汇编程序编程。您肯定需要使用 FPU 寄存器或 XMM/MMX/... 寄存器来进行原子 64 位访问。

关于c - 使用 gcc 在 32 位模式下原子读/写 64 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18587968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com