rand()
не является потокобезопасным, см. https://linux.die.net/man/3/rand. Вместо этого используйте более современные функции, определенные в random
, например,
std::random_device rd;
auto seed = rd ();
std::mt19937 mt (seed);
....
auto random_number = mt ();
Редактировать:
Как уже отмечали другие, mt19937::operator ()
также не гарантированно безопасен для потоков.Тогда лучше, как предполагает nm, создать один из этих объектов для каждого потока, как теперь показывает обновленное живое демо.
Живое демо