Come si può testare un codice e impostare il comportamento senza un'istruzione hardware speciale?

StackOverflow https://stackoverflow.com/questions/107184

Domanda

La maggior parte delle implementazioni che trovo richiedono un'istruzione hardware per farlo. Tuttavia dubito fortemente che ciò sia necessario (se lo è, non riesco a capire perché ...)

È stato utile?

Soluzione

Non è necessario un test e impostare le istruzioni per ottenere il blocco dell'esclusione reciproca, se è quello che stai chiedendo. Dijkstra descrisse il primo algoritmo di esclusione reciproca di cui sono a conoscenza, nel 1965. Il titolo dell'articolo era "Soluzione di un problema nel controllo di programmazione concorrente", cerca su Google una copia vicino a te. L'algoritmo originale non ha richiesto alcun supporto speciale dall'hardware, ma fornire un'istruzione atomica nella CPU migliora notevolmente le prestazioni.

Test-and-set, atomic swap e load-linked + store-conditional sono tutti primitivi comuni che le CPU forniscono. Tutti possono essere utilizzati per implementare l'esclusione reciproca, che può quindi essere utilizzata per implementare qualsiasi semantica di blocco desiderata.

Altri suggerimenti

Se desideri un modo cross-arch per farlo, e stai usando gcc, puoi usare i builtin atomici di gcc:

http://gcc.gnu.org/onlinedocs/gcc/Atomic -Builtins.html

La chiamata di questi genererà un'istruzione macchina specifica per l'hardware per l'architettura di build corrente. Su quelli che non li supportano, la compilazione fallirà. (Penso ...)

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