【发布时间】:2012-08-21 13:50:19
【问题描述】:
如何指定受多线程影响的算法的运行时间?
例如,CompareAndSet 循环可能永远不会被满足(如果你很不走运的话)
AtomicReference<ContainerOfItems> oldContainer;
void AddItem(Item aItem)
{
ContainerOfItems newContainer;
do
{
newContainer = null;
newContainer = new ContainerOfItems();
newContainer.CopyContents(oldContainer);
newContainer.Add(aItem);
}
while (!CompareAndSet(oldContainer, newContainer));
oldContainer = null;
}
在这个例子中(看起来很像 Java,但实际上是伪代码)CopyContents
操作可能需要很长时间,这样 oldContainer 已被其他线程替换,导致 CompareAndSet 失败。这段代码的运行时间是多少?
【问题讨论】:
标签: concurrency time-complexity