--- src/sb_ck_pr.h 2020-04-24 23:51:47.000000000 +0800 +++ src/sb_ck_pr.h 2026-04-23 11:09:48.000000000 +0800 @@ -117,9 +117,8 @@ CK_CC_INLINE static bool \ ck_pr_cas_##S(M *target, T compare, T set) \ { \ - bool z; \ - z = __sync_bool_compare_and_swap((T *)target, compare, set); \ - return z; \ + return __atomic_compare_exchange_n((T *)target, &compare, \ + set, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ } #define CK_PR_CAS_S(S, T) CK_PR_CAS(S, T, T) @@ -133,9 +132,11 @@ CK_CC_INLINE static bool \ ck_pr_cas_##S##_value(T *target, T compare, T set, T *v) \ { \ - set = __sync_val_compare_and_swap(target, compare, set);\ - *v = set; \ - return (set == compare); \ + bool z; \ + z = __atomic_compare_exchange_n(target, &compare, set, \ + 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ + *v = compare; \ + return z; \ } CK_PR_CAS_O(64, uint64_t) @@ -149,7 +150,8 @@ CK_CC_INLINE static void \ ck_pr_##K##_##S(M *target, T d) \ { \ - d = __sync_fetch_and_##K((T *)target, d); \ + (void)__atomic_fetch_##K((T *)target, d, \ + __ATOMIC_SEQ_CST); \ return; \ } --- third_party/concurrency_kit/ck/include/gcc/ck_pr.h 2020-04-24 23:51:47.000000000 +0800 +++ third_party/concurrency_kit/ck/include/gcc/ck_pr.h 2026-04-23 10:53:48.000000000 +0800 @@ -126,7 +126,7 @@ CK_CC_INLINE static void \ ck_pr_fence_strict_##T(void) \ { \ - __sync_synchronize(); \ + __atomic_thread_fence(__ATOMIC_SEQ_CST);\ } CK_PR_FENCE(atomic) @@ -157,9 +157,8 @@ CK_CC_INLINE static bool \ ck_pr_cas_##S(M *target, T compare, T set) \ { \ - bool z; \ - z = __sync_bool_compare_and_swap((T *)target, compare, set); \ - return z; \ + return __atomic_compare_exchange_n((T *)target, &compare, \ + set, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ } CK_PR_CAS(ptr, void, void *) @@ -183,18 +182,22 @@ CK_CC_INLINE static bool ck_pr_cas_ptr_value(void *target, void *compare, void *set, void *v) { - set = __sync_val_compare_and_swap((void **)target, compare, set); - *(void **)v = set; - return (set == compare); + bool z; + z = __atomic_compare_exchange_n((void **)target, &compare, set, 0, + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); + *(void **)v = compare; + return z; } #define CK_PR_CAS_O(S, T) \ CK_CC_INLINE static bool \ ck_pr_cas_##S##_value(T *target, T compare, T set, T *v) \ { \ - set = __sync_val_compare_and_swap(target, compare, set);\ - *v = set; \ - return (set == compare); \ + bool z; \ + z = __atomic_compare_exchange_n(target, &compare, set, \ + 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ + *v = compare; \ + return z; \ } CK_PR_CAS_O(char, char) @@ -214,7 +217,8 @@ CK_CC_INLINE static T \ ck_pr_faa_##S(M *target, T d) \ { \ - d = __sync_fetch_and_add((T *)target, d); \ + d = __atomic_fetch_add((T *)target, d, \ + __ATOMIC_SEQ_CST); \ return (d); \ } @@ -240,7 +244,8 @@ CK_CC_INLINE static void \ ck_pr_##K##_##S(M *target, T d) \ { \ - d = __sync_fetch_and_##K((T *)target, d); \ + (void)__atomic_fetch_##K((T *)target, d, \ + __ATOMIC_SEQ_CST); \ return; \ }