Replace platform-dependent barriers with c++11 std
This commit is contained in:
@@ -238,7 +238,8 @@ RingBuffer<T>::resized(int newSize) const
|
|||||||
{
|
{
|
||||||
RingBuffer<T> *newBuffer = new RingBuffer<T>(newSize);
|
RingBuffer<T> *newBuffer = new RingBuffer<T>(newSize);
|
||||||
|
|
||||||
MBARRIER();
|
std::atomic_thread_fence(std::memory_order_seq_cst);
|
||||||
|
|
||||||
int w = m_writer;
|
int w = m_writer;
|
||||||
int r = m_reader;
|
int r = m_reader;
|
||||||
|
|
||||||
@@ -464,7 +465,8 @@ RingBuffer<T>::write(const S *const R__ source, int n)
|
|||||||
w += n;
|
w += n;
|
||||||
while (w >= m_size) w -= m_size;
|
while (w >= m_size) w -= m_size;
|
||||||
|
|
||||||
MBARRIER();
|
std::atomic_thread_fence(std::memory_order_seq_cst);
|
||||||
|
|
||||||
m_writer = w;
|
m_writer = w;
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
@@ -498,7 +500,8 @@ RingBuffer<T>::zero(int n)
|
|||||||
w += n;
|
w += n;
|
||||||
while (w >= m_size) w -= m_size;
|
while (w >= m_size) w -= m_size;
|
||||||
|
|
||||||
MBARRIER();
|
std::atomic_thread_fence(std::memory_order_seq_cst);
|
||||||
|
|
||||||
m_writer = w;
|
m_writer = w;
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
|||||||
@@ -166,31 +166,6 @@ void gettimeofday(struct timeval *tv, void * /* tz */)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
void system_memorybarrier()
|
|
||||||
{
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MemoryBarrier();
|
|
||||||
#else /* (mingw) */
|
|
||||||
LONG Barrier = 0;
|
|
||||||
__asm__ __volatile__("xchgl %%eax,%0 "
|
|
||||||
: "=r" (Barrier));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#else /* !_WIN32 */
|
|
||||||
#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
|
|
||||||
// Not required
|
|
||||||
#else
|
|
||||||
#include <pthread.h>
|
|
||||||
void system_memorybarrier()
|
|
||||||
{
|
|
||||||
pthread_mutex_t dummy = PTHREAD_MUTEX_INITIALIZER;
|
|
||||||
pthread_mutex_lock(&dummy);
|
|
||||||
pthread_mutex_unlock(&dummy);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -117,43 +117,5 @@ void gettimeofday(struct timeval *p, void *tz);
|
|||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|
||||||
// The following should be functions in the RubberBand namespace, really
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
namespace RubberBand {
|
|
||||||
extern void system_memorybarrier();
|
|
||||||
}
|
|
||||||
#define MBARRIER() RubberBand::system_memorybarrier()
|
|
||||||
|
|
||||||
#else // !_WIN32
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
# if defined __MAC_10_12
|
|
||||||
# define MBARRIER() __sync_synchronize()
|
|
||||||
# else
|
|
||||||
# include <libkern/OSAtomic.h>
|
|
||||||
# define MBARRIER() OSMemoryBarrier()
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
|
|
||||||
# define MBARRIER() __sync_synchronize()
|
|
||||||
# else
|
|
||||||
namespace RubberBand {
|
|
||||||
extern void system_memorybarrier();
|
|
||||||
}
|
|
||||||
# define MBARRIER() ::RubberBand::system_memorybarrier()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // !_WIN32
|
|
||||||
|
|
||||||
#ifdef NO_THREADING
|
|
||||||
# undef MBARRIER
|
|
||||||
# define MBARRIER()
|
|
||||||
#endif // NO_THREADING
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user