最佳答案
在用 C + + 编写的 Dmitry Vyukov 的优秀有界 mpmc 队列中 参见: < a href = “ http://www. 1024cores.net/home/lock-free-rules/queue/bound-mpmc-queue”> http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue
他添加了一些填充变量,我假设这是为了使其与缓存线对齐以提高性能。
我有几个问题。
为什么缓冲区指针之前的填充有助于提高性能?是不是只有指针加载到缓存中所以它实际上只有指针的大小?
static size_t const cacheline_size = 64;
typedef char cacheline_pad_t [cacheline_size];
cacheline_pad_t pad0_;
cell_t* const buffer_;
size_t const buffer_mask_;
cacheline_pad_t pad1_;
std::atomic<size_t> enqueue_pos_;
cacheline_pad_t pad2_;
std::atomic<size_t> dequeue_pos_;
cacheline_pad_t pad3_;
Would this concept work under gcc for c code?