почему TreeBin поддерживает блокировку чтения-записи в ConcurrentHashMap? - PullRequest
0 голосов
/ 30 сентября 2018

TreeBin ConcurrentHashMap поддерживает паразитную блокировку чтения-записи.Кто может сказать мне, почему существует блокировка чтения-записи?

1 Ответ

0 голосов
/ 30 сентября 2018

В коде есть комментарий, объясняющий стратегию паразитной блокировки TreeBin, такой как:

/*
 * TreeBins also require an additional locking mechanism.  While
 * list traversal is always possible by readers even during
 * updates, tree traversal is not, mainly because of tree-rotations
 * that may change the root node and/or its linkages.  TreeBins
 * include a simple read-write lock mechanism parasitic on the
 * main bin-synchronization strategy: Structural adjustments
 * associated with an insertion or removal are already bin-locked
 * (and so cannot conflict with other writers) but must wait for
 * ongoing readers to finish. Since there can be only one such
 * waiter, we use a simple scheme using a single "waiter" field to
 * block writers.  However, readers need never block.  If the root
 * lock is held, they proceed along the slow traversal path (via
 * next-pointers) until the lock becomes available or the list is
 * exhausted, whichever comes first. These cases are not fast, but
 * maximize aggregate expected throughput.
 */

«Почему» объясняется следующим комментарием:

/**
 * TreeNodes used at the heads of bins. TreeBins do not hold user
 * keys or values, but instead point to list of TreeNodes and
 * their root. They also maintain a parasitic read-write lock
 * forcing writers (who hold bin lock) to wait for readers (who do
 * not) to complete before tree restructuring operations.
 */

ВКороче говоря, общая стратегия блокировки заключается в том, чтобы избежать блокировки путей чтения.Таким образом, карта разделена на «корзины», и каждая корзина имеет много блокировок чтения / записи.

За исключением того, что читатели фактически не блокируются, если есть конфликт блокировки.Вместо этого они пересекают всю корзину ... проверяя, была ли снята блокировка.«Паразитная» блокировка является реализацией этого.

...