Na niektórych platformach sprzętowych, trudno uzyskać dostęp do zasobu na wyłączność (czego wymaga wersja _strong()). Wtedy można rozważyć użycie wersji _weak() która zapewni porównanie do oczekiwanej wartości i jej nadpisanie ale nie da gwarancji wymiany danych z nową wartością. Do takich sytuacji może dochodzić w przypadku próby dostępu do danych np. na innym CPU lub w cache niedostępnym dla danej jednostki wykonawczej.
Nie wiem czy takie wyjaśnienie Ci wystarczy ale typy atomowe i lock_free programming to dość złożone zagadnienie :-)