函数名:原子添加 / 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);
- }