Korzystanie z , np. dla referencyjnego wskaźnika zliczającego, czy kompilator może zoptymalizować dalszą inkrementację i dekrementację?Czy std :: atomic kasuje przyrosty z dekrementami?
std::atomic_int32_t ai;
for (size_t i = 0; i < 10000; i++)
{
ai.fetch_add(1, std::memory_order_relaxed);
ai.fetch_sub(1, std::memory_order_relaxed);
}
Patrząc na demontaż nie wygląda. Ale ponieważ zmiana kolejności jest dozwolona i atomic
zachowuje się jak licznik, po prostu wątek bezpieczny, można argumentować, że mógłby zoptymalizować tak, jakby był zwykłym int.
Nie masz już odpowiedzi, jeśli zauważysz, że nie została ona zoptymalizowana? – rustyx
@rustyx: Tak to nie działa. To, że wdrożenie OP nie optymalizowało go w tym czasie, nie oznacza, że taka optymalizacja jest zabroniona. –
Próbowałem odpowiedzieć na to pytanie, ale nie znam się dobrze na terminologii z § 29.3. Czekamy na odpowiedź! –