受多线程影响的算法的运行时间如何指定?
例如,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
失败。这段代码的运行时间是多少?