Qual è la definizione minimo richiesto perx
s' tipo per questo codice lavorare, considerando la sincronizzazione implicita durante la creazione/unisce un filo: std::atomic
? volatile
? Niente?sincronizzazione implicita durante la creazione/filetti di giunzione
#include <thread>
#include <cassert>
int main() {
int x = 123; // ***
std::thread([ & ] { assert(x == 123); x = 321; }).join();
assert(x == 321);
return 0;
}
Ti consigliamo di leggere [questa risposta] (http://stackoverflow.com/a/3114174/1769720) a una domanda correlata. – didierc
'std :: thread ([&] {assert (x == 123); x = 321;}) .join();' Non c'è accesso simultaneo a 'x', potresti chiamare il lambda in sequenza per ottenere lo stesso comportamento. 'volatile' non serve mai per la sicurezza del filo, BTW. –