Domanda

Alla ricerca di un filo generatore casuale sicuro ho trovato una classe generatore di Mersenne Twister che l'autore dice che se thread-safe:

http://www.umiacs.umd.edu/~yangcj/mtrnd. html

Ma dopo aver studiato il codice non riesco a vedere fosse è thread-safe. Non ci sono serrature di qualsiasi tipo o qualsiasi cosa simile a un blocco variabile in là.

E 'questa implementazione davvero thread-safe? Se sì, quale è la magia?

È stato utile?

Soluzione

Sembra essere thread-safe nel senso che due diversi oggetti MersenneTwist possono essere utilizzati contemporaneamente. Non è possibile utilizzare lo stesso oggetto in due fili senza proteggere con una serratura.

Credo che la versione originale C L'autore parla di variabili globali o statici utilizzati in modo che sia un miglioramento.

Altri suggerimenti

C'è una discussione su come fare un multi-stream Mersenne Twister generatore di numeri casuali a più flusso di Mersenne Twister, e anche un'implementazione (vale a dire, il codice sorgente in Fortran 95) all'indirizzo http://theo.phys.sci.hiroshima-u.ac.jp/~ishikawa/PRNG /mt_stream_en.html . Il metodo inizia più flussi in punti nella sequenza Mersenne Twister che sono ampiamente separati, garantendo che i flussi multipli sono indipendenti l'uno dall'altro e non produrranno la stessa sequenza di numeri casuali. Non ci sono esigenze di serrature e quindi potenziali colli di bottiglia nel codice parallelo; i flussi separati accessibili da id.

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