Да, последняя строка гарантированно будет выполнена в конечном итоге [intro.progress] / 18
Реализация должна гарантировать, что последнее значение (в порядке изменения) назначено с помощью атоми c или операция синхронизации станет видимой для всех других потоков за конечный период времени.
Поскольку ваш флаг - атоми c, и это также единственная вещь, к которой любой поток когда-либо обращается в любом случае, здесь нет гонок данных. Поскольку для начала нет никаких загрузок или хранилищ для объектов, отличных от вашего атома c, ваша программа не может зависеть от какого-либо конкретного порядка таких несуществующих нагрузок или хранилищ относительно нагрузок и хранилищ для вашего атома c. Таким образом, расслабленного порядка памяти вполне достаточно. Поскольку гарантируется, что хранилище atomi c в потоке 1 в конечном итоге станет видимым для потока 2, l oop гарантированно в конечном итоге завершится…