Uno dei punti di forza delle strutture di dati immutabili è che sono automaticamente parallelizzabili. Se non si sta verificando alcuna mutazione, i riferimenti a una struttura dati funzionale possono essere passati tra i thread senza alcun blocco.Le strutture dati funzionali/immutabili possono ancora essere utili per la concorrenza in un contesto non garbage collection?
Ho avuto modo di pensare a come le strutture dati funzionali sarebbero state implementate in C++. Supponiamo di avere un conteggio di riferimento su ciascun nodo della nostra struttura dati. (Strutture di dati funzionale struttura azionaria tra vecchi e aggiornate membri di una struttura di dati, in modo da nodi non apparterrebbero univocamente ad una particolare struttura di dati.)
Il problema è che se i conteggi di riferimento sono in fase di aggiornamento in diversi thread, quindi i nostri dati la struttura non è più thread-safe. E il collegamento di un mutex a ogni singolo nodo è costoso e vanifica lo scopo di utilizzare strutture di dati immutabili per la concorrenza.
C'è un modo per rendere le strutture di dati immutabili simultanei lavorano in C++ (e altri ambienti raccolti non spazzatura)?
Non sono un esperto in questo, ma è possibile memorizzare il numero di riferimenti per-filo, e solo mettere un blocco su di loro per verificare se tutte le discussioni hanno raggiunto riferimento zero su un nodo. Ma sono sicuro che ci sono soluzioni più eleganti di questo o forse il conteggio dei riferimenti in generale. – sinelaw
Qui è una struttura di dati immutabili popolare per C++ http://www.sgi.com/tech/stl/Rope.html – ybungalobill
si poteva guardare implementazioni di 'shared_ptr', che si affaccia esattamente lo stesso problema con bisogno di un efficiente filettatura conteggio di riferimento sicuro –