Skip to content

[rpmalloc] Fake atomic operations in case of MSVC #146205

Open
@slydiman

Description

@slydiman

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);
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions