]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Thread safe atomic operations.
authorToni Wilen <twilen@winuae.net>
Sun, 31 Jan 2016 13:43:53 +0000 (15:43 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 31 Jan 2016 13:43:53 +0000 (15:43 +0200)
include/sysdeps.h
od-win32/posixemu.cpp

index 9d0f7de3a3bb87a9875c2cd239c552d74eac759a..c95aed829cf9bfc3b58da8f0922e309383c06d04 100644 (file)
@@ -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
index 6b8895265bfe8171fb15b7cf344d38de425b8259..3016317933d05206aa7b4c55efe551f7787bf9b4 100644 (file)
@@ -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
+