srand() + Threads



  • Hallo,

    ich würde gerne den Zufallsgenerator der Standardbibliothek benutzen, dazu muss man(sollte man jedenfalls) diesen beim Programmstart mit srand((unsigned int)time(0)) initialisieren. Das Problem was ich jedoch habe, ist, dass ich in einem Thread die Zufallszahl per rand() abfrage... ich bekomme als Ergebnis nur leider immer diese 41, was darauf hindeutet, dass er nicht initialisiert ist.. wenn ich rand() außerhalb des Threads benutze, geht es.
    Gibt es da eine Möglichkeit außer die, dass ich auf andere Bibliotheken zugreife?



  • Seit dem TR1 gibt es in C++ ein paar praktische Zufallszahlen-Generatoren http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

    (siehe auch boost::random)



  • Jup, danke... finds aber um einiges komplizierter, als einfach nur ein rand() aufzurufen.



  • du hast halt keine "globale Variable" mehr. Ansonsten ist es doch nicht komplizierter

    aus einem Code von mir (aber mit boost::random_generator, sollte aber ähnlich sein beim TR1)

    typedef boost::uniform_int<> distributor;
        typedef boost::variate_generator<random_source&, distributor> random_gen;
    
        distributor dist(0, 35);
        random_gen rand(src, dist);
    
        for(unsigned i = 0; i < 5; ++i)
          str += "ABCDEFGHiJKLMNOPQRSTUVWXYZ0123456789"[rand()];
    

Anmelden zum Antworten