Chcę zainicjować niektóre dane statyczne w wątku głównym.Czy funkcje mogą być zoptymalizowane, jeśli mają efekty uboczne?
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.
}
Jeśli kompilator może zdecydować, aby go usunąć, jak mogę zmusić go tam pozostać?
Jestem ostrożny z optymizmem, że osoby piszące kompilatory są wystarczająco inteligentne, aby nie wyrzucać wywołań funkcji, które mają skutki uboczne, tylko dlatego, że odrzucasz ich wartość zwrotu. – meagar
Wolałbym docenić jakąś odpowiednią sekcję normy. – Sam
Jeśli Twoim celem jest uniknięcie wyścigu (jak mówi komentarz kodu źródłowego), nie potrzebujesz pierwszego połączenia. C++ 11 gwarantuje brak warunków wyścigu dla lokalnej inicjalizacji zmiennych statycznych (poprzednie wersje standardu milczą na temat wątków). – Eugene