函数名:原子添加 / InterlockedAdd
返回值:返回原子添加以后的值。
int __InterlockedAdd(volatile int* localtion1, int value) noexcept {
_asm {
mov eax, dword ptr[value]
mov ecx, dword ptr[localtion1]
lock xadd dword ptr[ecx], eax
add eax, dword ptr[value]
}
}
函数名:原子减少 / InterlockedSub
返回值:返回原子减少以后的值。
int __InterlockedSub(volatile int* localtion1, int value) noexcept {
_asm {
mov eax, dword ptr[value]
neg eax
mov ecx, dword ptr[localtion1]
lock xadd dword ptr[ecx], eax
sub eax, dword ptr[value]
}
}
函数名:原子递增 / InterlockedIncrement
返回值:返回原子递增以后的值
inline
int __InterlockedIncrement(volatile int* localtion1) noexcept {
return __InterlockedAdd(localtion1, 1);
}
函数名:原子递减 / InterlockedDecrement
返回值:返回原子递减以后的值。
inline
int __InterlockedDecrement(volatile int* localtion1) noexcept {
return __InterlockedSub(localtion1, 1);
}
函数名:原子改变 / InterlockedExchange
返回值:返回原子改变之前的值。
int __InterlockedExchange(volatile int* localtion1, int value) noexcept {
_asm {
mov ecx, dword ptr[localtion1]
mov edx, dword ptr[value]
lrw:
lock cmpxchg dword ptr[ecx], edx
jne lrw
}
}
函数名:原子比较改变 / InterlockedExchange
返回值:返回原子比较改变之前的值,若未改变则返回原子原值。
int __InterlockedCompareExchange(volatile int* localtion1, int value, int comparand) noexcept {
_asm {
mov ecx, dword ptr[localtion1] // localtion1
mov edx, dword ptr[value] // value
mov eax, dword ptr[comparand] // comparand
lock cmpxchg dword ptr[ecx], edx
}
}
函数名:原子读值 / InterlockedRead
返回值:返回原子现行值。
inline
int __InterlockedRead(volatile int* localtion1) noexcept {
return __InterlockedCompareExchange(localtion1, 0, 0);
}