瀏覽代碼

util: Add os_atomic_compare_swap_long

Palana 10 年之前
父節點
當前提交
a907d74903
共有 3 個文件被更改,包括 13 次插入0 次删除
  1. 5 0
      libobs/util/threading-posix.c
  2. 5 0
      libobs/util/threading-windows.c
  3. 3 0
      libobs/util/threading.h

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

@@ -256,6 +256,11 @@ long os_atomic_dec_long(volatile long *val)
 	return __sync_sub_and_fetch(val, 1);
 }
 
+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);
+}
+
 void os_set_thread_name(const char *name)
 {
 #if defined(__APPLE__)

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

@@ -176,6 +176,11 @@ long os_atomic_dec_long(volatile long *val)
 	return InterlockedDecrement(val);
 }
 
+bool os_atomic_compare_swap_long(volatile long *val, long old_val, long new_val)
+{
+	return InterlockedCompareExchange(val, new_val, old_val) == old_val;
+}
+
 #define VC_EXCEPTION 0x406D1388
 
 #pragma pack(push,8)

+ 3 - 0
libobs/util/threading.h

@@ -73,6 +73,9 @@ EXPORT int  os_sem_wait(os_sem_t *sem);
 EXPORT long os_atomic_inc_long(volatile long *val);
 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 void os_set_thread_name(const char *name);