Mam pytanie odnośnie #cplusplus i #programowanie wielowątkowe. Dla ustalenia uwagi załóżmy że kompilator to linuksowe g++, a wątki są z biblioteki z c++11, chociaż to pewnie żadna różnica.
Do tej pory zawsze kompilowałem programy wielowątkowe bez żadnej optymalizacji i wszystko śmigało. Dołożenie flagi -02 może zepsuć działający kod przez optymalizacje kodu, najprostszy przykład:
int a=0 ; // zmienna globalna z której wszyscy będą korzystać ... ; while(!a) {} ; ... // watek1
@lionbest: @ponton: może nie widać z tego wpisu, ale ja rozumiem czym są zmienne atomowe, mutexy, zmienne warunkowe, teoretyczne modele synchronizacji... Pytanie dotyczyło możliwych optymalizacji przez kompilator. Np czy kompilator mógłby zwinąć coś takiego:
m.lock() a = 1 m.unlock() m.lock() a = a+100 m.unlock() w poniższy kod:
m.lock() a=101 m.unlock() ? Różnica jest wiadoma, pomiędzy lockami w pierwszej wersji drugi wątek mógłby poprawić zmienną a
Do tej pory zawsze kompilowałem programy wielowątkowe bez żadnej optymalizacji i wszystko śmigało. Dołożenie flagi -02 może zepsuć działający kod przez optymalizacje kodu, najprostszy przykład:
int a=0 ; // zmienna globalna z której wszyscy będą korzystać... ; while(!a) {} ; ... // watek1m.lock()a = 1
m.unlock()
m.lock()
a = a+100
m.unlock()
w poniższy kod:
m.lock()a=101
m.unlock()
? Różnica jest wiadoma, pomiędzy lockami w pierwszej wersji drugi wątek mógłby poprawić zmienną a
std::memory_model