Есть ли реализация вектора без блокировки? - PullRequest
11 голосов
/ 22 февраля 2012

Первый результат в Google для «вектора без блокировки» - исследовательская работа Дэмиана Дечева, Питера Пиркельбауэра и Бьярна Страуструпа, описывающая теоретический вектор без блокировки.Был ли реализован этот или любой другой свободный от вектора вектор?

Ответы [ 2 ]

0 голосов
/ 23 июля 2012

Я только что посмотрел, что такое вектор, в википедии.

Я думаю (только минута или две размышления, разумно), что полностью блокируемая версия немного проблематична.

Рассмотрим;Вы создаете массив, обращаетесь к нему в обычном режиме и т. д. Для этого вам не требуется блокировка.Проблема их возникает, когда вам нужно изменить размер.Поток, который входит и обнаруживает это, должен быть malloc.Это действительно уникальная операция - другие потоки на этом этапе должны блокироваться / вращаться.Если бы они попытались помочь, например, сделать malloc самостоятельно, у вас могло бы быть много потоков, выдающих malloc.На практике это может быть на практике число потоков, которые настолько малы, что все в порядке - в этом случае у вас может быть несколько потоков, выполняющих malloc, при этом победитель атомарно активирует новую память, а проигравшие видят это, а затем освобождаются () в их памяти.

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

Затем нам также понадобится способпоток, который знает, что он переместил последний элемент и может освободить этот массив, поэтому нам придется считать элементы;поэтому у нас есть риск потенциально неограниченных требований к распределению.Более того, структура данных (я сказал список, но это могут быть и другие вещи, хотя они не будут такими хорошими, если не считать), должны быть атомарными (поскольку, возможно, потоки могут удалять массив одновременно)и атомарный список без блокировок до недавнего времени был вершиной структур данных без блокировок, сколь бы сложными они ни были, требуя SMR и со сложной реализацией.

(я говорю до недавнего времени - кто-то недавно изобрелбез блокировок красно-чёрное дерево, всё это, добавляй и удаляй!)

ТБХ, я не понимаю, почему кто-то будет использовать вектор.Почему бы просто не использовать сбалансированное двоичное дерево или хеш?

0 голосов
/ 22 февраля 2012

MS предоставляет ppl :: concurrent_vector, а Intel предоставляет tbb :: concurrent_vector. В Windows по крайней мере ppl и tbb являются частью C-Runtime.

...