См.: http://www.1024cores.net/home/lock-free ... mpmc-queue
Он добавляет несколько переменных-дополнителей. Я предполагаю, что это сделано для того, чтобы привести его в соответствие со строкой кэша для повышения производительности.
У меня есть несколько вопросов.
- Почему это сделано именно так?
- Это переносимый метод, который будет
работать всегда - В каких случаях лучше всего использовать __attribute__
( (выровнено (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 enqueue_pos_; cacheline_pad_t pad2_; std::atomic dequeue_pos_; cacheline_pad_t pad3_;
Подробнее здесь: https://stackoverflow.com/questions/846 ... -line-size