我正在审查Facebook愚蠢的无锁队列,并且对于他们正在使用的方法不熟悉。
在write()函数中,它们使用语法
new (&records_[currentWrite]) T(std::forward<Args>(recordArgs)...);
我本来期待的更多内容
records_[currentWrite] = ....
我知道我遗漏了一些东西,但如果有人可以在这里解释new
的使用,因为我认为创建堆变量会产生开销后果。
if (nextRecord != readIndex_.load(std::memory_order_acquire)) {
new (&records_[currentWrite]) T(std::forward<Args>(recordArgs)...);
writeIndex_.store(nextRecord, std::memory_order_release);
return true;
}
https://github.com/facebook/folly/blob/master/folly/ProducerConsumerQueue.h
谢谢!