Condividi tramite


Annotazioni del driver per gli operandi interlock

Una grande famiglia di funzioni accetta come uno dei relativi parametri l'indirizzo di una variabile a cui è necessario accedere usando un'istruzione del processore interlocked. Si tratta di istruzioni atomiche di lettura nella cache e, se gli operandi vengono usati in modo errato, si verificano bug molto sottili.

Usare l'annotazione seguente per i parametri della funzione per identificarla come operando interlocked.

Annotazione dell'operando sincronizzato Descrizione
_Operando_interbloccato_ Il parametro annotato della funzione è l'operando di destinazione di una delle funzioni interlocked. Tali operandi devono avere proprietà aggiuntive specifiche.

I parametri della funzione annotati con il _Interlocked_operand_ devono essere condivisi tra processi. Le variabili usate con questa annotazione devono:

  • Essere dichiarato volatile.

  • Non essere una variabile locale. L'uso di una variabile locale indica in genere un malinteso della finalità della funzione. Anche se una variabile locale è in qualche modo condivisa, i requisiti di paging del sistema rendono problematico l'indirizzamento delle variabili in un altro processo.

  • L'accesso è consentito solo tramite una funzione interbloccata. Senza l'uso esplicito di una funzione interlocked, l'operazione potrebbe accedere ai dati non aggiornati, potrebbe verificarsi solo nella cache di un singolo processore o potrebbe essere ritardata nel raggiungimento del resto del sistema.

Le funzioni fornite dal sistema sono già annotate per gli operandi interbloccati.

Nell'esempio seguente viene illustrata l'annotazione per la funzione InterlockedExchange . Questa annotazione specifica che il parametro Target deve essere sempre accessibile tramite un'operazione interlocked.

LONG  
InterlockedExchange (  
    _Inout_ _Interlocked_operand_ LONG volatile *Target,  
    _In_ LONG Value  
    );  

Annotazioni SAL 2.0 per i driver