Mercurial > hg > svcore
diff system/System.h @ 835:1d439494604c
Memory barriers in ringbuffer
author | Chris Cannam |
---|---|
date | Mon, 16 Sep 2013 15:47:27 +0100 |
parents | 001d77a720ce |
children | cc27f35aa75c |
line wrap: on
line diff
--- a/system/System.h Tue Jul 30 18:15:30 2013 +0100 +++ b/system/System.h Mon Sep 16 15:47:27 2013 +0100 @@ -30,6 +30,9 @@ #define MUNLOCK_SAMPLEBLOCK(a) 1 #define MUNLOCKALL() 1 +extern void SystemMemoryBarrier(); +#define MBARRIER() SystemMemoryBarrier() + #define DLOPEN(a,b) LoadLibrary((a).toStdWString().c_str()) #define DLSYM(a,b) GetProcAddress((HINSTANCE)(a),(b)) #define DLCLOSE(a) (!FreeLibrary((HINSTANCE)(a))) @@ -99,6 +102,9 @@ #define MUNLOCKALL() 1 +#include <libkern/OSAtomic.h> +#define MBARRIER() OSMemoryBarrier() + #else #ifdef sun @@ -122,7 +128,14 @@ #define MUNLOCKALL() ::munlockall() -#endif /* __APPLE__ */ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) +#define MBARRIER() __sync_synchronize() +#else +extern void SystemMemoryBarrier(); +#define MBARRIER() SystemMemoryBarrier() +#endif + +#endif /* ! __APPLE__ */ #endif /* ! _WIN32 */