_Атомарные операции_ (atomics), например, _Compare-and-Swap _(CAS) или _Fetch-and-Add_ (FAA) широко распространены в параллельном программировании.
Мульти- или многоядерные архитектуры установлены одинаково как в продуктах настольных и серверных компьютеров, так и в крупных центрах обработки данных и суперкомпьютерах. Примеры конструкций включают Intel Xeon Phi с 61 ядрами на чипе, который установлен в Tianhe-2, или AMD Bulldozer с 32 ядрами на узле, развернутых в Cray XE6. Кроме того, количество ядер на кристалле неуклонно растет и процессоры с сотнями ядер, по прогнозам, будут изготовлены в обозримом будущем. Общей чертой всех этих архитектур является растущая сложность подсистем памяти, характеризующаяся несколькими уровнями кэш-памяти с разными политиками включения, различными протоколами когерентности кэш-памяти, а также различными сетевыми топологиями на чипе, соединяющими ядра и кэш-память.
Практически все такие архитектуры обеспечивают атомарные операции, которые имеют многочисленные применения в параллельном коде. Многие из них (например, _Test-and-Set_) могут быть использованы для реализации блокировок и других механизмов синхронизации. Другие, например, _Fetch-and-Add_ и _Compare-and-Swap_ позволяют строить разные lock-free и wait-free алгоритмы и структуры данных, которые имеют более прочные гарантии прогресса, чем блокировки на основе кода. Несмотря на их важность и повсеместное употребление, выполнение атомарных операций полностью не проанализировано до сих пор. Например, по общему мнению, _Compare-and-Swap_ идет медленнее, чем _Fetch-and-Add_. Тем не менее, это всего лишь показывает, что семантика _Compare-and-Swap_ вводит понятие «wasted work», в результате – более низкая производительность некоторого кода. [Читать дальше][1]
[1]:
https://habrahabr.ru/post/319036/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut