Нет, за исключением специального случая.
Это не может быть выполнено атомарно, в общем случае, когда a
, b
, c
и d
являются произвольными (то естьне обязательно смежный), и / или x
, y
, z
, w
каждый по 32 бита или больше.
Я использую «атомарно» для обозначения атомарной операции RMW, которую аппаратное обеспечение предоставляет .
Такие операции ограничены максимум 64-битным общим числом, поэтому 4 32-битные или более крупные величины могут не работать.Кроме того, все данные должны быть смежными и «естественно» выровненными, поэтому независимые местоположения не могут быть доступны в одном атомном цикле.
В особом случае, когда 4 величины - это 16-битные или 8-битные величины и смежныеи выровненный, вы можете использовать пользовательский атомарный .
Альтернативы для рассмотрения:
Вы можете использовать критических секций для достижения таких целей, вероятно, взначительные затраты производительности, сложность кода и хрупкость.
Другая альтернатива - изменить алгоритм, чтобы использовать некоторую форму параллельного сокращения .Поскольку вы работаете на уровне потокового блока, это может быть лучшим подходом.