2013-04-20 16 views
6

Mi trovo costantemente a scrivere codice Mutex per sincronizzare l'accesso in lettura/scrittura a una std :: unordered_map e altri contenitori in modo che possa usarli come faccio io java.util.concurrent contenitori. Stavo per iniziare a scrivere un wrapper per incapsulare il Mutex, ma preferirei usare una libreria ben testata, in modo da non riempire la discussione.C++ 11 equivalente di java.util.ConcurrentHashMap

Esiste una tale biblioteca?

+1

folly di facebook, offre una AtomicHashMap. https://github.com/facebook/folly?source=cr – inf

+0

Hmm, è meglio avere il mutex nella classe che ha la mappa e proteggere le letture e le scritture con mutex condiviso piuttosto che avvolgere la mappa. – balki

+0

La follia di Facebook non ti permette di cancellare elementi della mappa/memoria libera – easytiger

risposta

4

Intel ha prodotto una libreria denominata Threading Building Blocks che ha due cose: concurrent_hash_map e concurrent_unordered_map. Hanno leggermente diverso characteristics, ma uno o l'altro probabilmente si adatta alle tue esigenze.

+3

Grazie, sembra buono. Sfortunatamente è GPL, che non è compatibile con il progetto commerciale su cui sto lavorando. –

+0

Non è proprio così - date un'occhiata a http://threadingbuildingblocks.org/faq/10 - TBB ha una doppia licenza, quindi se avete bisogno o volete una licenza commerciale piuttosto che GPL, è disponibile. Lo consiglio vivamente. –

+0

Non sono esattamente la stessa cosa. La mappa TBB non supporta la cancellazione simultanea a differenza di quella java. – easytiger

1

Folly ha un'implementazione AtomicHashmap. La principale limitazione è che è possibile utilizzare solo le chiavi int32 o int64. Controlla la documentazione here (specialmente la sezione Limitazione)