Ad esempio, si consideri una std :: map implementata con un albero Splay. Questo tipo di struttura ad albero è mutabile e cambia ogni volta che si accede alla mappa per la lettura. Quando la mappa è const, chi deve garantire l'isolamento delle letture concorrenti, dipende dal codice utente o dall'implementazione della mappa?Concorrenza con const std :: T's
risposta
L'interrogante sa che se si dispone di thread che scrivono una collezione, l'utente deve gestire il blocco sincronizzato.
La domanda sembra essere se lo standard può garantire la sicurezza del thread se i thread simultanei leggono solo la raccolta.
Non sono sicuro che i vecchi standard C++ avessero alcuna garanzia di sicurezza del thread con nessuna operazione, ma il nuovo funzionerà (la sezione è stata fornita nei commenti, 23.2.2). Così com'è, la maggior parte dei venditori ora garantisce la sicurezza del thread tra letture concorrenti, nonostante il fatto che la concorrenza all'interno degli oggetti contenuti nella raccolta debba ovviamente essere gestita dall'utente.
Allo stesso modo, sarà possibile utilizzare i blocchi di lettura/scrittura su una raccolta STL.
Queste sono domande relative su stack overflow:
std::*
non garantisce la sicurezza del filo.
In realtà la sezione 23.2.2 di C++ 11 definisce le garanzie della corsa dei dati su contenitori standard. –
ok, voglio dire C++ 03 – triclosan
leggere l'argomento di seguito:
sembra simile a me con quello che stai chiedendo:
non credo che lo standard rende qualsiasi dichiarazione circa la concorrenza di contenitori. –
@OliCharlesworth: è vero anche per C++ 11? –
questa è una sorta di duplicato di questa domanda: http://stackoverflow.com/questions/1846186/thread-safety-of-stdmap-for-read-only-operations – CashCow