浏览代码

libobs/util: Add atomic functions for bool values

jp9000 10 年之前
父节点
当前提交
a914bb24fa
共有 3 个文件被更改,包括 12 次插入0 次删除
  1. 5 0
      libobs/util/threading-posix.c
  2. 5 0
      libobs/util/threading-windows.c
  3. 2 0
      libobs/util/threading.h

+ 5 - 0
libobs/util/threading-posix.c

@@ -261,6 +261,11 @@ bool os_atomic_compare_swap_long(volatile long *val, long old_val, long new_val)
 	return __sync_bool_compare_and_swap(val, old_val, new_val);
 }
 
+bool os_atomic_set_bool(volatile bool *ptr, bool val)
+{
+	return __sync_lock_test_and_set(ptr, val);
+}
+
 void os_set_thread_name(const char *name)
 {
 #if defined(__APPLE__)

+ 5 - 0
libobs/util/threading-windows.c

@@ -181,6 +181,11 @@ bool os_atomic_compare_swap_long(volatile long *val, long old_val, long new_val)
 	return InterlockedCompareExchange(val, new_val, old_val) == old_val;
 }
 
+bool os_atomic_set_bool(volatile bool *ptr, bool val)
+{
+	return (bool)InterlockedExchange8((volatile char*)ptr, (char)val);
+}
+
 #define VC_EXCEPTION 0x406D1388
 
 #pragma pack(push,8)

+ 2 - 0
libobs/util/threading.h

@@ -76,6 +76,8 @@ EXPORT long os_atomic_dec_long(volatile long *val);
 EXPORT bool os_atomic_compare_swap_long(volatile long *val,
 		long old_val, long new_val);
 
+EXPORT bool os_atomic_set_bool(volatile bool *ptr, bool val);
+
 EXPORT void os_set_thread_name(const char *name);