Функции высокого уровня сравнения и обмена (CAS)? - PullRequest
13 голосов
/ 30 сентября 2008

Я хотел бы задокументировать, какие высокоуровневые (т.е. C ++ не встроенный ассемблер) функции или макросы доступны для атомарных примитивов Compare And Swap (CAS) ...

Например, WIN32 на x86 имеет семейство функций _InterlockedCompareExchange в заголовке <_intrin.h>.

Ответы [ 7 ]

17 голосов
/ 30 сентября 2008

Я позволю другим перечислить различные API для конкретной платформы, но для дальнейшего использования в C ++ 09 вы получите

atomic_compare_exchange() 

операция в новой «Библиотеке атомарных операций».

9 голосов
/ 30 сентября 2008

glib, общая системная библиотека в системах Linux и Unix (но также поддерживается в Windows и Mac OS X), определяет несколько атомарных операций , включая g_atomic_int_compare_and_exchange и g_atomic_pointer_compare_and_exchange .

6 голосов
/ 30 сентября 2008

GCC имеет несколько встроенных для атомарного доступа тоже.

2 голосов
/ 08 ноября 2009

По этому вопросу был опубликован ряд документов рабочих групп, в которых предлагались изменения в стандартной библиотеке C ++. WG N2427 ( C ++ атомарные типы и операции ) - это самая последняя версия, которая дополняет раздел 29 - Библиотека атомарных операций - ожидающего рассмотрения стандарта.

2 голосов
/ 30 сентября 2008

MacOS X имеет OSAtomic.h

2 голосов
/ 30 сентября 2008

В Solaris есть «atomic.h» (т. Е. ).

1 голос
/ 30 сентября 2008

Java имеет эту операцию CAS тоже

см. здесь

для этого есть практические применения, такие как хеш-таблица без блокировки , используемая в многопроцессорной системе

...