Вероятно, это зависит от конкретной рассматриваемой атомарной библиотеки.
Хорошая библиотека с определенным внутренним интерфейсом, вероятно, в конечном итоге получит ту же реализацию пары инструкций ASM, чтобы выполнить инструкцию x86 lock и выполнить свою работу. И, предполагая, что сама библиотека переносима, впоследствии сделайте ваш код переносимым.
Наивная атомарная реализация может сделать что-то более тяжелое, например, использовать мьютекс для защиты нормальной переменной. Я не знаю ни одного, что делает - просто делает аргумент для аргумента.
Таким образом, учитывая ваши заявленные требования к переносимости, использование функций Win32 должно быть в порядке. В качестве альтернативы, продолжайте с Atomic-версией, но, возможно, посмотрите на фактическую реализацию.