【发布时间】:2012-02-21 22:05:56
【问题描述】:
Google 关于“无锁矢量”的第一个结果是由 Damian Dechev、Peter Pirkelbauer 和 Bjarne Stroustrup 合着的一篇研究论文,描述了理论上的无锁矢量。是否已经实现了这个或任何其他无锁向量?
【问题讨论】:
-
可能是libcds?
-
投反对票的人能解释一下自己吗?
-
@victor:说实话,建议的实现(从阅读你提到的文章的前几行)更像是一个双端队列而不是一个向量。你真正的要求是什么?如果您想要满足所有
std::vector要求的任何东西,答案很简单:它做不到。取决于您从std::vector不需要的东西,它可能是可以实现的(我没有投反对票,但您应该明确提出您的要求,而且,如果您要求 lock-less,我不'不明白你为什么接受一个执行锁定的答案) -
@DavidRodríguez-dribeas:公平地说,我认为 tbb::concurrent_vector 是无锁的。
-
@DavidRodríguez-dribeas:我看了这篇文章,它是向量而不是双端队列。绝对可以实现无锁向量。通常,通过让其他线程继续一个线程开始的工作,可以将每个锁定算法变成无锁算法。参见 Maurice Herlihy 的作品。这正是文章所描述的。也就是说,可能不值得进行无锁
resize操作 - 无论如何,其余操作都很容易无锁。
标签: c++ vector concurrency lock-free concurrent-vector