Selon: http://www.cplusplus.com/reference/cstdlib/rand/Alternative à rand() pour éviter les conditions de course?
En C, l'algorithme de génération utilisé par rand est garanti seulement être avancés par les appels à cette fonction. En C++, cette contrainte est relâchée, et une implémentation de bibliothèque est autorisée à avancer le générateur dans d'autres circonstances (telles que les appels aux éléments de ).
Mais ici il dit:
La fonction accède et modifie les objets d'état internes, qui peuvent causer des courses de données avec des appels simultanés à rand ou srand.
Certaines bibliothèques offrent une fonction alternative qui évite explicitement ce type de course de données: rand_r (non-portable).
Les implémentations de bibliothèques C++ sont autorisées à garantir qu'aucune race de données pour n'appelle cette fonction.
Idéalement je voudrais avoir une sorte de « instance » de rand, de sorte que pour cette instance, et une graine donnée, je produis toujours la même séquence de numéros pour les appels à cette instance . Avec les versions actuelles, il semble que sur certaines plateformes, les appels par d'autres fonctions à rand() (peut-être même sur des threads différents), pourraient affecter la séquence des nombres générés dans mon thread par mon code. Y at-il une alternative, où je peux conserver une sorte d '"instance", où je suis sûr de générer une séquence particulière, étant donné une graine, et où d'autres appels à différentes "instances" ne l'affectent pas?
EDIT: Pour plus de clarté - mon code va fonctionner sur plusieurs plateformes différentes (iOS, Android, Windows 8.1, Windows 10, Linux, etc.), et il m'est impossible de tester toutes les implémentations actuellement. Je voudrais juste mettre en œuvre des choses basées sur ce qui est garanti par la norme ...
Découvrez les fonctions de nombres aléatoires C++ 11: http://en.cppreference.com/w/cpp/numeric/random – aschepler
@aschepler Je me fiche de savoir à quel point les nombres sont "aléatoires". Il y a tellement de moteurs différents que ça va prendre beaucoup de temps pour savoir lequel fait ce que je demande dans la question .. –
D'accord, mais la nouvelle façon vous permet de stocker tout l'état que vous voulez, plutôt que de compter sur un état global. – aschepler