Se si blocca e si sblocca molto frequentemente, può esserci una penalità, dal momento che ottenere e rilasciare serrature richiede un po 'di tempo e può richiedere una discreta quantità di tempo se le serrature sono contese.
Quando si utilizzano molti blocchi in una struttura come questa, sarà necessario essere molto specifici su ciò che ogni blocco si blocca effettivamente, e assicurarsi di stare attenti ai blocchi di sicurezza di AB-BA. Ad esempio, se si modifica la struttura dell'albero durante un'operazione di blocco, sarà necessario bloccare tutti i nodi che verranno modificati, in un ordine coerente e assicurarsi che i thread che lavorano sui discendenti non vengano confusi.
Se si dispone di un numero molto elevato di blocchi, distribuiti in memoria, i problemi di memorizzazione nella cache potrebbero causare problemi di prestazioni, a seconda dell'architettura, poiché le operazioni di blocco generalmente invalidano almeno parte della cache.
La soluzione migliore è probabilmente quella di implementare una struttura di blocco semplice, quindi tracciarlo, quindi perfezionarlo per migliorare le prestazioni, se necessario. Non sono sicuro di cosa stai facendo con l'albero, ma un buon punto di partenza potrebbe essere un blocco di lettore-scrittore per l'intero albero, se ti aspetti di leggere molto più di quello che aggiorni.
"Dovremmo dimenticare le piccole efficienze, diciamo circa il 97% delle volte: l'ottimizzazione prematura è la radice di tutto il male." - Donald Knuth
Alcune migliaia su un singolo albero è .. un po 'discutibile .. ma difficile da dire senza realmente vederlo. Puoi pubblicare abbastanza codice per mostrare un esempio abbastanza comprensibile di ciò che stai facendo? –