È un 1: * scrivere: leggere il sistema di thread sicuro?

3

In teoria, il codice thread-safe dovrebbe correggere le condizioni di gara. Le condizioni di gara, a quanto ho capito, si verificano perché due thread tentano di scrivere nella stessa posizione nello stesso momento.

Tuttavia, che ne è di un modello di threading in cui un singolo thread è progettato per scrivere in una posizione e diversi thread slave / worker leggono semplicemente dalla posizione?

Supponendo che il valore / tempistica con cui leggono i dati non sia rilevante / non ostacoli il risultato del thread di lavoro, non sarebbe considerato "thread safe", o mi manca qualcosa nella mia logica?

    
posta Qix 31.08.2012 - 14:16
fonte

2 risposte

11

Ci sono due problemi:

  • Se viene scritto più di un singolo valore, allora senza sincronizzazione i thread di lettura potrebbero vedere dati parzialmente scritti e quindi incoerenti. Persino singoli valori possono essere letti in uno stato parzialmente scritto che corrisponde a nessuno dei valori legittimi (ad esempio in Java, la scrittura su campi lunghi e lunghi non è garantita per essere atomica).
  • I thread di lettura potrebbero ottenere valori obsoleti per un tempo arbitrariamente lungo dopo che è stato scritto, a causa della memorizzazione nella cache. Se questo non è un problema, perché avere un thread di scrittura?
risposta data 31.08.2012 - 14:24
fonte
4

Ci sono più problemi di questo.

  • scrivere potrebbe non essere atomico, cioè un thread potrebbe vedere un valore parzialmente aggiornato

  • anche se tutte le scritture sono atomiche, potresti entrare nella situazione in cui scrivi A poi B ma un altro thread vede la nuova B e la vecchia A. Sono necessarie alcune istruzioni di sincronizzazione per assicurarti di vedere tutto ciò che volere. Queste istruzioni potrebbero essere necessarie in entrambi i thread, non solo in quello di scrittore o di lettore.

risposta data 31.08.2012 - 14:28
fonte

Leggi altre domande sui tag