Sto avendo una funzione che deve essere eseguita n=1000
volte. Questa funzione esegue una simulazione in stile Monte Carlo e restituisce come risultato un int
. Mi piacerebbe eseguire nthreads=4
in parallelo. Ogni volta che un thread termina un ciclo, dovrebbe inserire il risultato in un std::vector<int>
. Quindi, dopo 1000 cicli, ho un vettore di 1000 int
s che può essere esaminato dalle statistiche.Posso creare uno std :: atomic <vector<int> thread-safe>?
Poiché un std::vector
non è thread-safe, ho pensato a std::mutex
(che sicuramente funzionerebbe).
Ma mi chiedo se posso dichiarare un vettore come atomico e quindi aggirare i mutex? E 'possibile avere un std::atomic<std::vector<int>>
? E posso usare push_back
ecc. Su di esso?
Did std :: atomic> compilato? –
DawidPi
Non riesco a provare su questa macchina ... ma mi sono imbattuto in atomico. – dani
Volevo solo aggiungere che se sai fin dall'inizio che avrai 1000 esecuzioni e il tuo contenitore memorizzerà esattamente 1000 risultati, allora perché vuoi utilizzare il contenitore dinamico? So che std :: vector utilizza l'array nella sua implementazione e non sarà necessaria alcuna riallocazione se si prenota abbastanza spazio all'inizio (quindi non ci sarà alcun guadagno di prestazioni dall'uso di std :: array). – dptd