Domanda

Finché le chiamate simultanee non causano seg-v o restituiscono lo stesso valore, quali sono le ragioni per prevenire le condizioni di competizione e il danneggiamento dei dati in PRNGs quando gli effetti primari di questo errore sono risultati imprevedibili e questo è il punto di un PRNG?


Modifica: ci sono PRNG che non subirebbero condizioni di gara e corruzione dei dati?

È stato utile?

Soluzione

I PRNG sono strumenti meticolosamente costruiti - francamente, se le condizioni di gara e i thread thread fossero un buon PRNG, l'implementazione sarebbe scritta in questo modo.

Il problema con l'aggiunta di bug di threading per aumentare la casualità è che si tratta di una modifica non studiata al generatore. Gli algoritmi e le implementazioni di sicurezza esistenti sono stati ampiamente testati; se vuoi provare una variante non sicura, dovrai fare il lavoro di grugnito statistico per dimostrare che è almeno casuale come un normale PRNG.

Altri suggerimenti

  

quando gli effetti primari di questo errore sono risultati imprevedibili e questo è il punto di un PRNG?

" caso " non è lo stesso dell'imprevedibile - Casuale implica una certa distribuzione che è molto importante mantenere se si vogliono numeri casuali reali. Se i tuoi numeri casuali sono prevedibili in qualche modo, può essere un problema di sicurezza o almeno un bug del programma

Generalmente li renderà meno deterministici (male se si fa affidamento sul loro determinismo, cosa che fanno molte persone) e potrebbero o meno renderli meno pseudo-casuali, a seconda dei loro particolari dettagli di implementazione e delle sottigliezze di come il tuo hardware si comporta.

Ma in genere le persone che scrivono app multithread dichiarano il loro stato PRNG in TLS (thread-local-storage). In questo modo non importa, ogni thread ha il proprio PRNG e le gare non accadranno se non le crei deliberatamente. Non all'interno del codice PRNG comunque. Questo è senza blocco e prestazioni più o meno complete (a seconda dell'implementazione TLS utilizzata).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top