Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Uma grande família de funções toma como um de seus parâmetros o endereço de uma variável que deve ser acessada usando uma instrução de processador intertravado. Estas instruções atómicas são de leitura de cache e, se os operandos forem usados incorretamente, resultam em bugs muito subtis.
Utilize a seguinte anotação nos parâmetros da função para os identificar como operandos intertravados.
| Anotação de operando intertravado | Descrição |
|---|---|
| _Interlocked_operand_ | O parâmetro de função anotada é o operando de destino de uma das funções intertravadas. Esses operandos devem ter propriedades adicionais específicas. |
Espera-se que os parâmetros de função anotados com o _Interlocked_operand_ sejam compartilhados entre os processos. As variáveis utilizadas com esta anotação devem:
Ser declarado volátil.
Não ser uma variável local. O uso de uma variável local geralmente indica um mal-entendido da intenção da função. Mesmo que uma variável local seja de alguma forma compartilhada, os requisitos de paginação do sistema tornam problemático abordar variáveis em outro processo.
Não pode ser acessado exceto por uma função intertravada. Sem o uso explícito de uma função intertravada, a operação pode acessar dados obsoletos, pode ocorrer apenas no cache de um único processador ou pode demorar a chegar ao resto do sistema.
As funções fornecidas pelo sistema já estão anotadas para operandos sincronizados.
O exemplo a seguir mostra a anotação para a função InterlockedExchange . Esta anotação especifica que o parâmetro Target deve sempre ser acessado usando uma operação interbloqueada.
LONG
InterlockedExchange (
_Inout_ _Interlocked_operand_ LONG volatile *Target,
_In_ LONG Value
);