From: Toni Wilen Date: Sun, 31 Jan 2016 13:43:53 +0000 (+0200) Subject: Thread safe atomic operations. X-Git-Tag: 3300~104 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=92efe426265df2263e6aba490a01d95db040ec52;p=francis%2Fwinuae.git Thread safe atomic operations. --- diff --git a/include/sysdeps.h b/include/sysdeps.h index 9d0f7de3..c95aed82 100644 --- a/include/sysdeps.h +++ b/include/sysdeps.h @@ -215,6 +215,12 @@ typedef uae_u32 uaecptr; #define UVAL64(a) (a ## ul) #endif +void atomic_and(volatile uae_atomic *p, uae_u32 v); +void atomic_or(volatile uae_atomic *p, uae_u32 v); +uae_atomic atomic_inc(volatile uae_atomic *p); +uae_atomic atomic_dec(volatile uae_atomic *p); +uae_u32 atomic_bit_test_and_reset(volatile uae_atomic *p, uae_u32 v); + #ifdef HAVE_STRDUP #define my_strdup _tcsdup #else diff --git a/od-win32/posixemu.cpp b/od-win32/posixemu.cpp index 6b889526..30163179 100644 --- a/od-win32/posixemu.cpp +++ b/od-win32/posixemu.cpp @@ -243,4 +243,29 @@ void uae_set_thread_priority (uae_thread_id *tid, int pri) } } +void atomic_and(volatile uae_atomic *p, uae_u32 v) +{ + _InterlockedAnd(p, v); +} +void atomic_or(volatile uae_atomic *p, uae_u32 v) +{ + _InterlockedOr(p, v); +} +void atomic_set(volatile uae_atomic *p, uae_u32 v) +{ +} +uae_atomic atomic_inc(volatile uae_atomic *p) +{ + return _InterlockedIncrement(p); +} +uae_atomic atomic_dec(volatile uae_atomic *p) +{ + return _InterlockedDecrement(p); +} + +uae_u32 atomic_bit_test_and_reset(volatile uae_atomic *p, uae_u32 v) +{ + return _interlockedbittestandreset(p, v); +} #endif +