Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Большое семейство функций принимает в качестве одного из своих параметров адрес переменной, к которой следует получить доступ с помощью инструкции процессора с блокировкой. Это атомарные инструкции с прямым чтением из кэша, и если операнды используются неправильно, возникают очень тонкие ошибки.
Используйте следующую аннотацию для параметров функции, чтобы определить его как взаимоблокируемый операнд.
| Аннотация о синхронизированном операнде | Описание |
|---|---|
| _Interlocked_operand_ | Параметр аннотированной функции является целевым операндом одной из заблокированных функций. Эти операнды должны иметь определенные дополнительные свойства. |
Ожидается, что параметры функции, аннотированные с _Interlocked_operand_, будут совместно использоваться между процессами. Переменные, используемые с этой заметкой, должны:
Объявите volatile.
Не быть локальной переменной. Использование локальной переменной обычно указывает на недоразумение намерения функции. Даже если локальная переменная каким-то образом является общим, системные требования к разбиению по страницам делают адресацию переменных в другом процессе проблематичным.
К ней можно получить доступ только через взаимосвязанную функцию. Без явного использования взаимоблокирующей функции операция может получить доступ к устаревшим данным, может обращаться только к кэшу одного процессора или может быть задержана при распространении в остальной части системы.
Системные функции уже аннотированы для межблокированных операндов.
В следующем примере показана заметка для функции InterlockedExchange . Эта заметка указывает, что к параметру Target всегда требуется доступ с помощью операции с блокировкой.
LONG
InterlockedExchange (
_Inout_ _Interlocked_operand_ LONG volatile *Target,
_In_ LONG Value
);