Ваш заголовок просит, чтобы вещи происходили по порядку.Это легко, и C ++ делает это автоматически с mo_seq_cst
;все видимые побочные эффекты CAS появятся до любого из ftruncate
.
О каких помех вы беспокоитесь?Какой-то другой поток, изменяющий размер файла?Вы не можете предотвратить это состояние гонки.
Невозможно объединить некоторые операции с памятью + системный вызов в одну атомарную транзакцию.Вам нужно использовать системный вызов, который атомарно делает то, что вы хотите.
Или вам нужна блокировка.(Или как-то приостановить все остальные потоки вашего процесса.)