Функция InterlockedExchangeAdd (winnt.h)
Выполняет атомарное сложение двух 32-разрядных значений.
Для работы с 64-разрядными значениями используйте функцию InterlockedExchangeAdd64 .
Синтаксис
LONG InterlockedExchangeAdd(
[in, out] LONG volatile *Addend,
[in] LONG Value
);
Параметры
[in, out] Addend
Указатель на переменную. Значение этой переменной будет заменено результатом операции.
[in] Value
Значение, добавляемое к переменной, на которую указывает параметр Addend .
Возвращаемое значение
Функция возвращает начальное значение параметра Addend .
Комментарии
Функция выполняет атомарное сложение Значения к значению, на которое указывает Addend. Результат хранится по адресу, указанному в addend. Функция возвращает начальное значение переменной, на которую указывает Addend.
Переменные для этой функции должны быть выровнены по 32-разрядной границе; В противном случае эта функция будет работать непредсказуемо в многопроцессорных системах x86 и любых системах, отличных от x86. См . _aligned_malloc.
Заблокированные функции предоставляют простой механизм для синхронизации доступа к переменной, совместно используемой несколькими потоками. Эта функция является атомарной по отношению к вызовам других взаимосвязанных функций.
Эта функция реализуется с помощью встроенной функции компилятора, где это возможно. Дополнительные сведения см. в файле заголовка WinBase.h и _InterlockedExchangeAdd
Эта функция создает полный барьер памяти (или ограждение), чтобы гарантировать, что операции с памятью выполняются по порядку.
Системы на основе Itanium: Для критически важных для производительности приложений используйте InterlockedExchangeAddAcquire .
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winnt.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
См. также
Доступ к заблокированным переменным
InterlockedExchangeAddAcquire64
InterlockedExchangeAddNoFence64