Любой пример, где данных вначале нет, а потом есть, и их надо проверить. То есть вначале получить - потому проверить, и если полученные данные не ОК, то идём на вторую итерацию, заного получать. Отличный пример - атомарная операция замены старого значения на новое на основе compare-and-swap на процессоре. Заодно почитайте что такое CAS, будет полезно.
do {
old_value = read(address);
new_value = old_value+1;
} while ( ! cas( address, old_value, new_value ) )