Replace platform-dependent barriers with c++11 std

This commit is contained in:
Chris Cannam
2024-03-07 11:50:39 +00:00
parent 5a4e3a8466
commit e5bff67c13
3 changed files with 6 additions and 66 deletions

View File

@@ -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;

View File

@@ -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
} }

View File

@@ -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