C не был разработан для многопоточности, поэтому поведение srand () с многопоточностью не определено и зависит от библиотеки времени выполнения C.
Многие библиотеки времени выполнения Unix / Linux C используют одно статическое состояние, которое не являетсябезопасный доступ из нескольких потоков, поэтому в этих средах выполнения C вы не можете использовать srand () и rand () из нескольких потоков вообще.Другие среды выполнения Unix C. могут вести себя по-разному.
Среда выполнения Visual C ++ использует внутреннее состояние для каждого потока, поэтому безопасно вызывать srand () для каждого потока.Но, как указал Нейл, вы, скорее всего, начнете заполнять все потоки с одинаковым значением - поэтому вместо этого начните с (time + thread-id).
Конечно, для переносимости используйте случайные объекты, а не функцию rand, а затемвы бы не зависели от скрытого состояния вообще.Вам все еще нужен один объект на поток, и заполнение каждого объекта с помощью (time + thread-id) все еще является хорошей идеей.