Sto leggendo sulla sicurezza filo di vari contenitori STL da questo link Ora mi sono imbattuto in questo punto in cui si afferma per C++ 11 soloC++ 11/C++ 03 e std :: vector filo di sicurezza
elementi diversi nello stesso contenitore possono essere modificati contemporaneamente da fili diversi, ad esclusione degli elementi di
std::vector<bool>
(per esempio, un vettore distd::future
oggetti può essere ricevere valori di da più thread)
significa se ho un metodo come quello che viene utilizzato da più thread contemporaneamente (notice the method does not have any locks)
void ChangeValue(int index , int value)
{
someVector[index] = value;
}
è sicuro il metodo di cui sopra. La mia comprensione è che è sicuro solo per C++ 11. Tuttavia quando guardo l'altra dichiarazione di cui al link
Tutte le funzioni membro const può essere chiamato contemporaneamente da diversi discussioni sullo stesso contenitore. Inoltre, le funzioni membro begin(), end(), rbegin(), rend(), front(), back(), data(), find(), lower_bound(), upper_bound(), equal_range (), a(), e, eccetto nei contenitori associativi , operatore [], si comportano come cost ai fini di sicurezza thread (ovvero, possono anche essere chiamati contemporaneamente da thread diversi sullo stesso contenitore). Più in generale, le funzioni di libreria standard di C++ non modificano gli oggetti a meno che tali oggetti non siano accessibili, direttamente o indirettamente, tramite gli argomenti non costanti della funzione, incluso il puntatore this, con .
Sono giunto alla conclusione che in C++ 03 il metodo di cui sopra può essere tranquillamente utilizzato. Gentilmente fammi sapere se la mia comprensione è corretta.
Non ha senso chiedersi se qualcosa è sicuro per i thread in C++ 03 - C++ 03 e in precedenza non aveva alcun concetto di thread o sicurezza dei thread. –
'ChangeValue' è thread-safe (come definito da C++ 11 e versioni successive) a condizione che due thread non passino lo stesso argomento per' index', altrimenti le chiamate che passano lo stesso argomento sono sincronizzate l'una con l'altra in qualche modo esterne alla funzione. –
Grazie per averlo eliminato Igor. Potresti metterlo come risposta – MistyD