// timer — общий на всю прогу atomic<long long>
// Можно рассчитывать только на 64-битную архитектуру
long long newTime = someUtcTime();
long long oldTime = timer;
do {
newTime = std::max(newTime, oldTime + 1); // должен быть больше того, что имеется
} while (!timer.compare_exchange_strong(&oldTime, newTime))
return (oldTime = newTime);