in dispenso/detail/concurrent_vector_impl.h [363:379]
void allocAsNecessary(const BucketInfo& binfo) {
const size_t indexToCheck = (kStrategy == ConcurrentVectorReallocStrategy::kFullBufferAhead)
? 0
: (kStrategy == ConcurrentVectorReallocStrategy::kHalfBufferAhead
? binfo.bucketCapacity / 2
: binfo.bucketCapacity - 1);
if (DISPENSO_EXPECT(binfo.bucketIndex == indexToCheck, 0)) {
if (!this->buffers_[binfo.bucket + 1].load(std::memory_order_acquire)) {
this->buffers_[binfo.bucket + 1].store(
cv::alloc<T>(binfo.bucketCapacity << 1), std::memory_order_release);
shouldDealloc_[binfo.bucket + 1] = true;
}
}
while (DISPENSO_EXPECT(!this->buffers_[binfo.bucket].load(std::memory_order_acquire), 0)) {
}
}