89 size_t tail_sequence = _tail.load(std::memory_order_relaxed);
93 Node* node = &_buffer[tail_sequence & _mask];
94 size_t node_sequence = node->sequence.load(std::memory_order_acquire);
97 int64_t diff = (int64_t)node_sequence - (int64_t)(tail_sequence + 1);
104 if (_tail.compare_exchange_weak(tail_sequence, tail_sequence + 1, std::memory_order_relaxed))
107 swap(record, node->value);
110 node->sequence.store(tail_sequence + _mask + 1, std::memory_order_release);
122 tail_sequence = _tail.load(std::memory_order_relaxed);