diff options
| -rw-r--r-- | src/common/ring_buffer.h | 12 | 
1 files changed, 10 insertions, 2 deletions
| diff --git a/src/common/ring_buffer.h b/src/common/ring_buffer.h index 45926c9ec..0fd5b86f0 100644 --- a/src/common/ring_buffer.h +++ b/src/common/ring_buffer.h @@ -9,6 +9,7 @@  #include <atomic>  #include <cstddef>  #include <cstring> +#include <new>  #include <type_traits>  #include <vector>  #include "common/common_types.h" @@ -102,8 +103,15 @@ public:  private:      // It is important to align the below variables for performance reasons:      // Having them on the same cache-line would result in false-sharing between them. -    alignas(128) std::atomic<std::size_t> m_read_index{0}; -    alignas(128) std::atomic<std::size_t> m_write_index{0}; +    // TODO: Remove this ifdef whenever clang and GCC support +    //       std::hardware_destructive_interference_size. +#if defined(_MSC_VER) && _MSC_VER >= 1911 +    alignas(std::hardware_destructive_interference_size) std::atomic_size_t m_read_index{0}; +    alignas(std::hardware_destructive_interference_size) std::atomic_size_t m_write_index{0}; +#else +    alignas(128) std::atomic_size_t m_read_index{0}; +    alignas(128) std::atomic_size_t m_write_index{0}; +#endif      std::array<T, granularity * capacity> m_data;  }; | 
