Witam
Przeczytałem na ten temat kilkanaście artykułów w necie ale nic z tego nie rozumiem. Może dlatego że na początku założyłem, że template atomic<T> to to samo co gdy masz zmienną typu T + mutex, tylko że w tym drugim wypadku przed każdym użyciem zmiennej (read/write) musisz manualnie wywołać mutex.lock/unlock() a w atomic domyślam się że już pod spodem to jest wywoływane. I z takim założeniem być może dlatego mam problem ze zrozumieniem po co ta metoda i co ona oznacza. Np. mamy opis:
All atomic types except for std::atomic_flag may be implemented using mutexes or other locking operations, rather than using the lock-free atomic CPU instructions. Atomic types are also allowed to be sometimes lock-free, e.g. if only aligned memory accesses are naturally atomic on a given architecture, misaligned objects of the same type have to use locks.
The C++ standard recommends (but does not require) that lock-free atomic operations are also address-free, that is, suitable for communication between processes using shared memory.
Nawet na polski nie potrafię tego sobie przetłumaczyć o czym oni powyżej mówią. Pierwsze słysze że jest jakaś asemblerowa intrukcja lock-free atomic. Dalej to już jakaś czarna magia. Z góry dzięki za objaśnienie jak ktoś kuma po co jest is_lock_free. Np. był tam przykład że ta klasa :
struct B { int x, y; };
atomic<B>
jest is_lock_free. Czyli jak metoda zwraca mi true to oznacze że w ogóle nie potrzebuje opakowywać zmiennej w template atomic i w ogóle nie potrzebuje mutexa dla niej?