Thread-safe twister Mersenne
-
01-10-2019 - |
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?
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.