Open
Description
In case of MSVC dummy functions are used for atomic operations.
This can cause side effects and difficult to debug issues.
/// Atomic access abstraction (since MSVC does not do C11 yet)
#if defined(_MSC_VER) && !defined(__clang__)
typedef volatile long atomic32_t;
static FORCEINLINE int32_t atomic_load32(atomic32_t *src) { return *src; }
static FORCEINLINE void atomic_store32(atomic32_t *dst, int32_t val) {
*dst = val;
}
Is there any reason do not use intrinsics somethink like the following?
#include <intrin.h>
static FORCEINLINE int32_t atomic_load32(atomic32_t *src) {
return _InterlockedOr(src, 0);
}
static FORCEINLINE void atomic_store32(atomic32_t *dst, int32_t val) {
_InterlockedExchange(dst, val);
}