Come si può testare un codice e impostare il comportamento senza un'istruzione hardware speciale?
-
01-07-2019 - |
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é ...)
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 ...)