Desidero inizializzare alcuni dati statici sul thread principale.È possibile ottimizzare le funzioni se presentano effetti collaterali?
int32_t GetFoo(ptime t)
{
static HugeBarData data;
return data.Baz(t);
}
int main()
{
GetFoo(); // Avoid data race on static field.
// But will it be optimized away as unnecessary?
// Spawn threads. Call 'GetFoo' on the threads.
}
Se il compilatore può decidere di rimuoverlo, come posso costringerlo a rimanere lì?
Sono cautamente ottimista sul fatto che le persone che scrivono compilatori siano abbastanza intelligenti da non gettare invocazioni di funzioni che hanno effetti collaterali, solo perché si scarta il loro valore di ritorno. – meagar
Preferirei piuttosto una sezione pertinente dello standard. – Sam
Se il tuo scopo è quello di evitare le condizioni di gara (come dice il commento del codice sorgente), non hai bisogno della chiamata iniziale. C++ 11 non garantisce condizioni di competizione per l'inizializzazione delle variabili statiche locali (le precedenti versioni dello standard non rispondevano ai thread). – Eugene