gpt4 book ai didi

visual-c++ - Visual C++ 中是否有 X64 固有的 8 位原子 CAS (cmpxchg)?

转载 作者:行者123 更新时间:2023-12-04 04:30:57 25 4
gpt4 key购买 nike

以下代码在 32 位 Visual Studio C++ 中是可能的。由于 64 位版本的 Visual Studio C++ 不支持内联 ASM,因此是否有使用内在函数的 64 位等效项?

FORCEINLINE bool bAtomicCAS8(volatile UINT8 *dest, UINT8 oldval, UINT8 newval)
{
bool result=false;
__asm
{
mov al,oldval
mov edx,dest
mov cl,newval
lock cmpxchg byte ptr [edx],cl
setz result
}
return(result);
}

以下内在函数在 Visual Studio C++ 下编译
_InterlockedCompareExchange16
_InterlockedCompareExchange
_InterlockedCompareExchange64
_InterlockedCompareExchange128

我正在寻找的是类似的东西
_InterlockedCompareExchange8

但这似乎并不存在。

最佳答案

不,那不存在。如果需要,您可以离线实现它。

atomic_msvc_x64.asm

_text   SEGMENT

; char _InterlockedCompareExchange8(volatile char*, char NewValue, char Expected)
; - RCX, RDX, R8

_InterlockedCompareExchange8 PROC

mov eax,r8d
lock cmpxchg [rcx],dl
ret

_InterlockedCompareExchange8 ENDP

_text ENDS

END

关于visual-c++ - Visual C++ 中是否有 X64 固有的 8 位原子 CAS (cmpxchg)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796459/

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