На платформах Intel и однопроцессорных это не имеет значения.
В многопроцессорных системах PPC вы всегда должны использовать барьерные функции, если только атомарное хранилище не влияет на данные , отличные , чем атомная переменная.
Следующее не будет в порядке:
data_structure[y].data++;
OSAtomicIncrement32(y);
Вы должны использовать здесь барьер, потому что другие потоки могут считать структуру данных устаревшей.
Однако, если вы используете атомарную переменную для какой-то цели, где она стоит одна, вы можете пропустить барьер:
// y is not used to access any other data
OSAtomicIncrement32(y);
Хорошо, если значение y не влияет на переменную какой-либо общей структуры данных.
По сути, это очистка кеша. Вы всегда можете безопасно использовать барьерные функции, но в некоторых случаях вы можете улучшить производительность, не используя барьерные функции, например, если y не используется относительно структуры данных. Вероятно, не так много случаев, когда вы можете использовать функции без барьера.