@@ -966,11 +966,11 @@ # error of_atomic_ptr_cmpswap not implemented! #endif } static OF_INLINE void -of_memory_barrier(void) +of_memory_barrier_sync(void) { #if !defined(OF_HAVE_THREADS) /* nop */ #elif defined(OF_X86_64_ASM) __asm__ __volatile__ ( @@ -992,17 +992,37 @@ # error of_memory_barrier not implemented! #endif } static OF_INLINE void -of_memory_enter_barrier(void) +of_memory_barrier_enter(void) +{ + of_memory_barrier_sync(); +} + +static OF_INLINE void +of_memory_barrier_exit(void) +{ + of_memory_barrier_sync(); +} + +static OF_INLINE void +of_memory_barrier_producer(void) { - of_memory_barrier(); +#if defined(OF_X86_64_ASM) + __asm__ __volatile__ ("sfence" ::: "memory"); +#else + of_memory_barrier_sync(); +#endif } static OF_INLINE void -of_memory_leave_barrier(void) +of_memory_barrier_consumer(void) { - of_memory_barrier(); +#if defined(OF_X86_64_ASM) + __asm__ __volatile__ ("lfence" ::: "memory"); +#else + of_memory_barrier_sync(); +#endif } OF_ASSUME_NONNULL_END