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