Nel contesto della correttezza dei programmi concorrenti, la coerenza sequenziale è più forte della coerenza quiescente secondo L'arte della programmazione multiprocessore di Maurice Herlihy e Nir Shavit (capitolo 3) Autori menzionare anche in 3.4.1 che ci sono esecuzioni coerentemente sequenziali che non sono costantemente coerenti. Non capisco come. Qualcuno potrebbe lanciare una luce o fornire un'esecuzione del campione?Esempio di esecuzione che è sequenzialmente coerente ma non quiescostante coerente
risposta
Considerare uno queue (FIFO) a cui si accodano e si rimuovono gli elementi.
Da this dissertation sulla concomitanza, ho letto (p.20):
Un esempio di uno scenario che viene ammesso nel modello sequenziale consistenza e annullato nel modello consistenza quiescente è mostrato in Figura 2.1 . Due processi condividono una struttura di dati della coda concorrente. Il processo esegue l'accodamento x. Ad un intervallo successivo non sovrapposto, , un secondo processo accoda y. Infine, il secondo processo esegue un dequeue e riceve y. Questo esempio è coerente in modo sequenziale ma è non uniforme, supponendo che il tempo tra le operazioni di accodamento non rientri nell'intervallo di quiescenza.
Figura 2.1:
T1: --- enq(x) --------------------------- T2: ------------- enq(y) ---- deq():y ----
Questa storia è consentita dalla consistenza sequenziale, può essere sia permesso o proibito dalla consistenza quiescente, ed è proibito dalla consistenza linearizzabile.
Se si assume che tra i due accodati la coda fosse inattiva, allora T2 dovrebbe vedere le modifiche da T1 e la dequeue deve restituire x. Se si presuppone che non vi sia stato alcun intervallo di quiescenza tra i due accodamenti, allora due accodamenti possono essere ripetuti come si desidera e deq(): y è coerente.
- 1. CloudKit è fortemente coerente o coerente?
- 2. Perché Cache.asMap() non è coerente con Cache.size()?
- 3. UICollectionView layout non coerente, UICollectionViewFlowLayout
- 4. coerente keyCode per `#`
- 5. Che cos'è la memoria coerente su GPU?
- 6. System.nanoTime() è coerente tra i thread?
- 7. Data/ora evento JavaScript non coerente
- 8. Terminologia coerente: modellazione, DAE, ODE
- 9. Matplotlib, font coerente con latex
- 10. trattamento con memcached/hashing coerente
- 11. Coda di invio coerente: arresto com.apple.root.default-qos.overcommit
- 12. Modalità di tavolo - Devo essere coerente?
- 13. Controllo delle versioni coerente nel progetto Python
- 14. Class.getDeclaredFields() restituisce membri in un ordine coerente?
- 15. Python: "rientro inaspettato", ma il rientro è apparentemente corretta e coerente
- 16. L'evento UIControlEventValueChanged non viene attivato per UIPageControl in modo coerente
- 17. Esiste un'implementazione di clock coerente (monotona) in Java?
- 18. Ho bisogno di un generatore di numeri pseudocasuale portatile, coerente
- 19. Eventualmente coerente database distribuito con operatore di incremento idempotenziale?
- 20. date in modo coerente due giorni di riposo
- 21. Risoluzione dei problemi coerente "SQLException: Timeout di attesa blocco superato"
- 22. È garantito che Perl restituisca le chiavi hash ordinate in modo coerente?
- 23. La gerarchia delle attività di tipo non è coerente quando si estende ActionBarActivity
- 24. NSFetchedResultsController ritardo coerente nell'aggiornamento della cella UITableView; inserire funziona immediatamente
- 25. Larghezza coerente per geom_bar in caso di dati mancanti
- 26. La coda pull in GAE mostra un comportamento FIFO coerente?
- 27. Un modo coerente per salvare la fonte della pagina web
- 28. Aggiornamento a .NET 4.5: Un controllo ItemsControl non è coerente con i relativi articoli
- 29. Maven SNAPSHOT nomi dei file jar non è coerente con Assemblea Maven nel file manifesto
- 30. Facebook Like (URL. Servite queste risorse da un URL coerente)
Può la seguente esecuzione essere un esempio di "Quiescently consistent ma non sequenzialmente coerente"? T1: - enq (x) --------- enq (y) ------------________________________________________________ T2: ------- deq (y) --- ----------- | ---- deq (x) -_______________________________________________ Questa esecuzione non è chiaramente coerente in modo sequenziale. Tuttavia, se prendiamo convenientemente un intervallo di quiescenza a ** | **, potremmo riordinare due enq() s di T1 e sarà quiescently coerente. @ewernli, pensi che questa spiegazione abbia senso? – Trojosh
Penso di sì, basato sulla mia comprensione della coerenza della quiescenza. Ma questa è una nuova forma di coerenza anche per me, l'ho imparato ieri :) – ewernli
@ewernli è la ragione per cui questa coerenza è considerata sequenziale che enq (y) deq(): y enq (x) è una possibile sequenza di esecuzione sequenziale? I.E è ancora valido nell'ordine di programma. – William