windows atomic

This commit is contained in:
cadem 2024-02-02 13:47:11 +08:00
parent 010d3fc860
commit 881df9d936
2 changed files with 22 additions and 0 deletions

View File

@ -21,6 +21,8 @@
#if !defined(WINDOWS) #if !defined(WINDOWS)
#define C11_ATOMIC #define C11_ATOMIC
#else
//#define DOUBLE_ATOMIC
#endif #endif
#ifdef C11_ATOMIC #ifdef C11_ATOMIC
@ -33,7 +35,11 @@ struct taos_metric_sample {
#ifdef C11_ATOMIC #ifdef C11_ATOMIC
_Atomic double r_value; /**< r_value is the value of the metric sample */ _Atomic double r_value; /**< r_value is the value of the metric sample */
#else #else
#ifdef DOUBLE_ATOMIC
double r_value; /**< r_value is the value of the metric sample */ double r_value; /**< r_value is the value of the metric sample */
#else
int64_t r_value;
#endif
#endif #endif
}; };

View File

@ -81,7 +81,11 @@ int taos_metric_sample_add(taos_metric_sample_t *self, double r_value) {
} }
} }
#else #else
#ifdef DOUBLE_ATOMIC
atomic_fetch_add_double(&self->r_value, r_value); atomic_fetch_add_double(&self->r_value, r_value);
#else
atomic_fetch_add_64(&self->r_value, r_value);
#endif
#endif #endif
return 0; return 0;
@ -103,7 +107,11 @@ int taos_metric_sample_sub(taos_metric_sample_t *self, double r_value) {
} }
} }
#else #else
#ifdef DOUBLE_ATOMIC
atomic_fetch_sub_double(&self->r_value, r_value); atomic_fetch_sub_double(&self->r_value, r_value);
#else
atomic_fetch_sub_64(&self->r_value, r_value);
#endif
#endif #endif
return 0; return 0;
@ -118,7 +126,11 @@ int taos_metric_sample_set(taos_metric_sample_t *self, double r_value) {
#ifdef C11_ATOMIC #ifdef C11_ATOMIC
atomic_store(&self->r_value, r_value); atomic_store(&self->r_value, r_value);
#else #else
#ifdef DOUBLE_ATOMIC
atomic_store_double(&self->r_value, r_value); atomic_store_double(&self->r_value, r_value);
#else
atomic_store_64(&self->r_value, r_value);
#endif
#endif #endif
return 0; return 0;
@ -140,7 +152,11 @@ int taos_metric_sample_exchange(taos_metric_sample_t *self, double r_value, doub
} }
} }
#else #else
#ifdef DOUBLE_ATOMIC
*old_value = atomic_exchange_double(&self->r_value, r_value); *old_value = atomic_exchange_double(&self->r_value, r_value);
#else
*old_value = atomic_exchange_64(&self->r_value, r_value);
#endif
#endif #endif
return 0; return 0;