La coerenza sequenziale richiede che le operazioni sembrino avere effetto nell'ordine in cui sono specificate in ciascun programma. Fondamentalmente impone l'ordine del programma all'interno di ogni singolo processo e consente a tutti i processi di assumere che stiano osservando lo stesso ordine di operazioni. Diciamo che abbiamo 2 processi di accodamento e rimozione dalla coda gli elementi in una coda q
:
P1 -- q.enq(x) -----------------------------
P2 -------------- q.enq(y) ---- q.deq():y --
Questo non è il comportamento previsto da una coda FIFO. Ci aspettiamo di rimuoverlo x perché P1 accoda lo x
prima che P2 acceda allo . Tuttavia, questo scenario è consentito nel modello di coerenza sequenziale perché la coerenza sequenziale non richiede che l'ordine visto da tutti i processi sia corretto (ordine in tempo reale). C'è almeno un esecuzione sequenziale che possono spiegare questi risultati e uno è:
P2:q.enq(y) P1:q.enq(x) P2:q.deq():y
In questa esecuzione ogni processo esegue operazioni al fine programma significa che ogni processo esegue le sue operazioni nel nell'ordine in cui sono specificati in ogni processo .
La consistenza quiescente richiede che le operazioni non sovrapposte abbiano effetto nel loro ordine in tempo reale, ma le operazioni di sovrapposizione potrebbero essere riordinate. Pertanto, lo stesso scenario non è ammesso nel modello di coerenza quiescente poiché ci aspettiamo che q.enq(x)
abbia effetto prima del q.enq(y)
e q.deq()
per restituire x
anziché . Anche la coerenza quiescente non preserva necessariamente l'ordine del programma. Se q.enq(x)
e q.enq(y)
sarebbero operazioni concorrenti (che si sovrappongono), potrebbero essere riordinate e q.deq():y
sarebbe ininterrottamente coerente.
Fondamentalmente alcune esecuzioni sono sequenzialmente coerenti ma non quiescentemente coerenti e viceversa.
fonte
2016-08-11 14:34:03
Vedere: http: // coldattic.info/shvedsky/pro/blog/a-foo-cammina-in-a-bar/post/88 – jessehouwing
Consistenza quiescente significa che una struttura dati è considerata coerente dopo l'esecuzione di un'operazione su di essa e prima che su di essa venga eseguita un'altra (cioè nel tempo "tranquillo"). Consistenza sequenziale significa che la struttura rimane coerente indipendentemente da quale operazione di ordine viene eseguita su di essa da diversi thread. –
@jessehouwing Grazie, il link ha aiutato molto. – theCuriousOne