マルチスレッドの影響を受けるアルゴリズムの実行時間はどのように指定されていますか?
たとえば、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
て失敗する可能性があります。このコードの実行時間は?