Domanda

Vorrei eseguire e una lettura atomica di 64b allineati 64b dati sulla piattaforma x86 (Pentium o superiore garantito).

C'è un modo per fare questo? (E no, io non voglio usare una sezione critica o di un mutex per questo, io voglio che questo sia senza blocchi).

È stato utile?

Soluzione

Utilizzare le operazioni Interlocked, ecco alcuni esempi di codice:

LONGLONG AtomicRead(LONGLONG* p)
{
    return InterlockedCompareExchange64(p, 0, 0);
}

Questo fa lo scambio confrontare con lo zero e imposta p a zero se è già pari a -cioè a zero, si tratta di un noop. InterlockedCompareExchange restituisce il valore originale a 64 bit puntato da p.

Altri suggerimenti

Questa pagina descrive come farlo. In pratica dovete solo usare lock cmpxchg8b.

Utilizza l'Interlocked * () funzioni.

Non c'è lettura di per sé -. Ma si può emettere un add () in cui si aggiunge 0

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top