Skip to content

Commit e5bff67

Browse files
committed
Replace platform-dependent barriers with c++11 std
1 parent 5a4e3a8 commit e5bff67

File tree

3 files changed

+6
-66
lines changed

3 files changed

+6
-66
lines changed

src/common/RingBuffer.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ RingBuffer<T>::resized(int newSize) const
238238
{
239239
RingBuffer<T> *newBuffer = new RingBuffer<T>(newSize);
240240

241-
MBARRIER();
241+
std::atomic_thread_fence(std::memory_order_seq_cst);
242+
242243
int w = m_writer;
243244
int r = m_reader;
244245

@@ -464,7 +465,8 @@ RingBuffer<T>::write(const S *const R__ source, int n)
464465
w += n;
465466
while (w >= m_size) w -= m_size;
466467

467-
MBARRIER();
468+
std::atomic_thread_fence(std::memory_order_seq_cst);
469+
468470
m_writer = w;
469471

470472
return n;
@@ -498,7 +500,8 @@ RingBuffer<T>::zero(int n)
498500
w += n;
499501
while (w >= m_size) w -= m_size;
500502

501-
MBARRIER();
503+
std::atomic_thread_fence(std::memory_order_seq_cst);
504+
502505
m_writer = w;
503506

504507
return n;

src/common/sysutils.cpp

-25
Original file line numberDiff line numberDiff line change
@@ -166,31 +166,6 @@ void gettimeofday(struct timeval *tv, void * /* tz */)
166166

167167
#endif
168168

169-
#ifdef _WIN32
170-
void system_memorybarrier()
171-
{
172-
#ifdef _MSC_VER
173-
MemoryBarrier();
174-
#else /* (mingw) */
175-
LONG Barrier = 0;
176-
__asm__ __volatile__("xchgl %%eax,%0 "
177-
: "=r" (Barrier));
178-
#endif
179-
}
180-
#else /* !_WIN32 */
181-
#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
182-
// Not required
183-
#else
184-
#include <pthread.h>
185-
void system_memorybarrier()
186-
{
187-
pthread_mutex_t dummy = PTHREAD_MUTEX_INITIALIZER;
188-
pthread_mutex_lock(&dummy);
189-
pthread_mutex_unlock(&dummy);
190-
}
191-
#endif
192-
#endif
193-
194169
}
195170

196171

src/common/sysutils.h

-38
Original file line numberDiff line numberDiff line change
@@ -117,43 +117,5 @@ void gettimeofday(struct timeval *p, void *tz);
117117

118118
} // end namespace
119119

120-
// The following should be functions in the RubberBand namespace, really
121-
122-
#ifdef _WIN32
123-
124-
namespace RubberBand {
125-
extern void system_memorybarrier();
126-
}
127-
#define MBARRIER() RubberBand::system_memorybarrier()
128-
129-
#else // !_WIN32
130-
131-
#include <stdio.h>
132-
133-
#ifdef __APPLE__
134-
# if defined __MAC_10_12
135-
# define MBARRIER() __sync_synchronize()
136-
# else
137-
# include <libkern/OSAtomic.h>
138-
# define MBARRIER() OSMemoryBarrier()
139-
# endif
140-
#else
141-
# if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
142-
# define MBARRIER() __sync_synchronize()
143-
# else
144-
namespace RubberBand {
145-
extern void system_memorybarrier();
146-
}
147-
# define MBARRIER() ::RubberBand::system_memorybarrier()
148-
# endif
149-
#endif
150-
151-
#endif // !_WIN32
152-
153-
#ifdef NO_THREADING
154-
# undef MBARRIER
155-
# define MBARRIER()
156-
#endif // NO_THREADING
157-
158120
#endif
159121

0 commit comments

Comments
 (0)