Cos'è l'Atomicità?

1

Sto davvero lottando per trovare una spiegazione concreta, facile da comprendere, di Atomicity.

La mia comprensione finora è che per garantire che un'operazione sia atomica, si avvolge il codice critico in un armadietto. Ma questo è tanto quanto io in realtà capisco. Definizioni come quella qui sotto non hanno alcun senso per me.

An operation during which a processor can simultaneously read a location and write it in the same bus operation. This prevents any other processor or I/O device from writing or reading memory until the operation is complete. Atomic implies indivisibility and irreducibility, so an atomic operation must be performed entirely or not performed at all.

Che cosa significa l'ultima frase? Il termine indivisibility è relativo alla matematica o qualcos'altro?

A volte il gergo con questi argomenti confonde più di quello che insegnano.

    
posta James Jeffery 24.05.2014 - 14:11
fonte

3 risposte

8

L'atomicità è un tratto che definisce se un'operazione può essere interrotta o meno. In generale, non si riferisce a un gruppo di operazioni in lock . Un blocco non garantisce che nient'altro possa essere eseguito durante il blocco, solo nient'altro può eseguire quel codice, su quell'istanza durante il blocco.

Diamo un'occhiata a un esempio: int x = 4 * sin(pi)

Senza ottimizzazione, questa affermazione non è atomica.

  • Il recupero di pi sarà di solito atomico, supponendo che sia un doppio e il tuo processore possa leggere un doppio in un ciclo di clock.
  • Chiamare sin e restituirne il risultato (supponendo che sin sia una funzione e non qualcosa come una macro) non è atomico poiché qualcosa può essere eseguito tra il codice in esecuzione e restituendo il valore.
    • Certo, questo probabilmente non ha importanza. pi verrà copiato andando nella funzione e sin è improbabile che sia una funzione mutabile. Quindi mentre questo è threadsafe (nell'uso comune) non è atomico.
  • Sulla maggior parte di tutti i processori che moltiplicano due doppi e l'assegnazione del risultato sarà un'operazione atomica poiché verrà eseguita in un'unica operazione dal processore.

Quindi, le cose più importanti da notare:

  • Avere due operazioni atomiche non produce un altro, poiché il processore può passare a un altro thread tra di loro.
  • Un'operazione che è atomica su una macchina potrebbe non essere su un'altra.
  • L'ottimizzazione può rendere un'operazione che non è atomica in una che è (e occasionalmente, viceversa!)
  • L'atomicità conta perché se qualcosa non può essere interrotto, è intrinsecamente sicuro. Le serrature sono costose, quindi le operazioni atomiche in punti chiave possono migliorare notevolmente le prestazioni e la correttezza simultanee.
risposta data 24.05.2014 - 15:33
fonte
-1

Personalmente non definirei un'operazione atomica ininterrotta, dopotutto potresti far saltare in aria la macchina. :) Direi che era uno che non poteva essere, attraverso tutti i tipi di meccanismi di varia efficacia e costo, parzialmente completo.

È successo tutto (non importa quanto grande o piccolo è) o non è successo affatto.

    
risposta data 24.05.2014 - 20:56
fonte
-2

Ad esempio, vai in bagno, chiudi la porta, fai il bagno, lavati e asciuga le mani e poi apri la porta.

In assenza di un'emergenza (come un allarme antincendio), si prevede di completare l'intero processo senza interruzioni. È come un singolo evento "scatola nera" dal punto di vista di qualcuno all'esterno che vede A) che entri; B) esci.

(L'equivalente di un allarme antincendio sarebbe un interrupt di livello superiore).

    
risposta data 24.05.2014 - 15:36
fonte

Leggi altre domande sui tag