Если вы блокируете и разблокируете очень часто, может быть наложен штраф, так как получение и снятие блокировок занимает некоторое время и может занять достаточно много времени, если блокировки установлены.
При использовании множества блокировок в структуре, подобной этой, вам нужно будет очень точно определить, что фактически блокирует каждая блокировка, и убедиться, что вы осторожны с тупиками AB-BA. Например, если вы изменяете структуру дерева во время операции блокировки, вам нужно будет заблокировать все узлы, которые будут изменены, в согласованном порядке и убедиться, что потоки, работающие с потомками, не запутались.
Если у вас очень большое количество блокировок, распределенных по памяти, проблемы с кэшированием могут вызвать проблемы с производительностью, в зависимости от архитектуры, поскольку операции блокировки обычно делают недействительной хотя бы некоторую часть кэша.
Лучше всего, вероятно, реализовать простую структуру блокировки, затем профилировать ее, а затем уточнить ее, чтобы улучшить производительность, если это необходимо. Я не уверен, что вы делаете с деревом, но для начала лучше всего использовать одну блокировку чтения-записи для всего дерева, если вы ожидаете прочитать намного больше, чем обновите.
«Мы должны забыть о малой эффективности, скажем, в 97% случаев: преждевременная оптимизация - корень всего зла».
- Дональд Кнут