безблокировочный скиплист с операцией ранга - PullRequest
0 голосов
/ 03 февраля 2012

Кто-нибудь знает о каких-либо имплиментах с пропуском без блокировок и / или исследовательских работах, которые поддерживают операцию ранга (то есть найти элемент kth)? Или кто-нибудь знает фундаментальную причину, по которой такая операция никогда не может работать?

Бонусные баллы:

Имплиментация, которая не предполагает сборку мусора. По моему опыту, многие исследовательские работы игнорируют управление памятью.

Поддержка:

Для описания того, как операция ранга может быть сделана в обычном скиплисте: "Поваренная книга списка пропусков" Уильяма Пью

Для одного из лучших описаний пропусков без блокировки: «Практическая блокировка свободы» Кейра Фрейзера

Один из лучших вариантов пропуска списка без блокировок: http://www.1024cores.net/home/parallel-computing/concurrent-skip-list

1 Ответ

1 голос
/ 04 февраля 2012

В отличие от key , value и level , которые являются локальными свойствами элемента в списке пропусков и не зависят от операций с другими элементами, rank элемента, то есть его позиция в списке, - это свойство, которое изменяется при вставке и удалении элементов с более низким рангом.Поэтому для параллельного списка пропусков ранг элемента является очень эфемерным, потому что он может быть изменен в любой момент одновременно выполняющейся операцией, которая вставляет или удаляет элемент более низкого ранга.

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

Короче говоря, для параллельного списка ранг элемента - это плохо определенная концепция, а поиск по рангу - плохо определенная операция.Это основная причина, по которой он никогда не может работать, и почему разработчики никогда не должны беспокоиться о предоставлении такой операции.

...