Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/linyaps_box/utils/ringbuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ auto ring_buffer_deleter::operator()(ring_buffer *rb) const -> void
rb->~ring_buffer();
::operator delete(rb,
total_size,
std::align_val_t(std::hardware_constructive_interference_size));
std::align_val_t(compat::hardware_constructive_interference_size));
}

auto ring_buffer::create(std::size_t requested_capacity)
Expand All @@ -31,7 +31,7 @@ auto ring_buffer::create(std::size_t requested_capacity)

const auto total_size = sizeof(ring_buffer) + capacity;
auto *mem = ::operator new(total_size,
std::align_val_t(std::hardware_constructive_interference_size));
std::align_val_t(compat::hardware_constructive_interference_size));
auto *rb = new (mem) ring_buffer(capacity);
return { rb, ring_buffer_deleter(total_size) };
}
Expand Down
14 changes: 13 additions & 1 deletion src/linyaps_box/utils/ringbuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,18 @@
#include <sys/uio.h>
#include <unistd.h>

namespace linyaps_box::compat {
#ifdef __cpp_lib_hardware_interference_size
using std::hardware_constructive_interference_size;
using std::hardware_destructive_interference_size;
#else
// default to 64 bytes if not defined
// if the platform has different cache line size, please define these macros accordingly
constexpr std::size_t hardware_constructive_interference_size = 64;
constexpr std::size_t hardware_destructive_interference_size = 64;
#endif
} // namespace linyaps_box::compat

namespace linyaps_box::utils {

class ring_buffer;
Expand All @@ -26,7 +38,7 @@ struct ring_buffer_deleter
std::size_t total_size{ 0 };
};

class alignas(std::hardware_constructive_interference_size) ring_buffer
class alignas(compat::hardware_constructive_interference_size) ring_buffer
{
using iov_view = std::array<struct iovec, 2>;

Expand Down