В отличие от key , value и level , которые являются локальными свойствами элемента в списке пропусков и не зависят от операций с другими элементами, rank элемента, то есть его позиция в списке, - это свойство, которое изменяется при вставке и удалении элементов с более низким рангом.Поэтому для параллельного списка пропусков ранг элемента является очень эфемерным, потому что он может быть изменен в любой момент одновременно выполняющейся операцией, которая вставляет или удаляет элемент более низкого ранга.
Например, предположим, что вы выполняете линейный поиск k -й элемент в списке уровня 1.В тот момент, когда вы сделали k шагов, одновременные модификации могут добавить или удалить любое количество предыдущих элементов, поэтому текущий ранг найденного вами элемента фактически неизвестен.Более того, пока поток выполняет k прямые итерации, параллельные изменения могут быть сделаны между его текущей позицией и элементом, который был k -ым, когда он начал поиск.Таким образом, поиск заканчивается тем, что ни элемент с текущим рангом k , ни элемент с рангом k в начале поиска.Это просто какой-то случайный элемент!
Короче говоря, для параллельного списка ранг элемента - это плохо определенная концепция, а поиск по рангу - плохо определенная операция.Это основная причина, по которой он никогда не может работать, и почему разработчики никогда не должны беспокоиться о предоставлении такой операции.