lundi 1 juin 2020

C++ random uniform_int_distribution return same values in all threads

I have the following code, I need to have a random number in given interval. Seems to work how I need.

   std::default_random_engine eng;
     std::uniform_int_distribution<int> dist(3, 7);
     int timeout = dist(eng);

But then I run it in different threads and repeated in the loop.

    std::default_random_engine defRandEng(std::this_thread::get_id());
    std::uniform_int_distribution<int> dist(3, 7);
    int timeout; // if I put timeout = dist(defRandEng); here it's all the same

    while (true)
    {
        timeout = dist(defRandEng);
        std::cout<<"Thread "<<std::this_thread::get_id()<<" timeout = "<<timeout<<std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(timeout));
}

But for every iteration in all threads the values are the same

Thread 139779167999744 timeout = 6
Thread 139779134428928 timeout = 6
Thread 139779067287296 timeout = 6
Thread 139779117643520 timeout = 6
Thread 139779100858112 timeout = 6
Thread 139779084072704 timeout = 6
Thread 139779151214336 timeout = 6
Thread 139779050501888 timeout = 6
Thread 139779033716480 timeout = 6

next interation

Thread 139779167999744 timeout = 4
Thread 139779151214336 timeout = 4
Thread 139779134428928 timeout = 4
Thread 139779117643520 timeout = 4
Thread 139779100858112 timeout = 4
Thread 139779084072704 timeout = 4
Thread 139779067287296 timeout = 4
Thread 139779050501888 timeout = 4
Thread 139779033716480 timeout = 4



Aucun commentaire:

Enregistrer un commentaire