В Дмитрий Вьюков отличная ограниченная очередь mpmc, написанная на С++ См.: http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue
Он добавляет некоторые переменные заполнения. Я предполагаю, что это должно привести его к строке кэша для производительности.
У меня есть некоторые вопросы.
- Почему это делается таким образом?
- Это переносимый метод, который всегда работать
- В каких случаях лучше было бы использовать
__attribute__ ((aligned (64)))
. -
зачем было заполняться до указателя буфера с помощью производительности? это не только указатель, загруженный в кеш, так что на самом деле это только размер указателя?
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_;
Будет ли эта концепция работать под gcc для c-кода?