Annotazioni 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 di funzione per identificarla come operando interlock.

Annotazione operando interlocked Descrizione
_Interlocked_operand_ Il parametro della funzione con annotazioni è 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 i 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.

  • Non è possibile accedere ad eccezione di una funzione interlocked. 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 interlock.

Nell'esempio seguente viene illustrata l'annotazione per la funzione InterlockedExchange . Questa annotazione specifica che è necessario accedere al parametro Target usando un'operazione interlocked.

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

Annotazioni SAL 2.0 per i driver