rand()
& srand()
не являются безопасными в этом случае.
Они оба не являются ни входящими, ни безопасными .Вообще говоря, ни в стандартах C, ни в C ++ не предъявляются какие-либо требования в отношении безопасности потоков ни для одной из стандартных функций библиотеки.
Некоторые реализации действительно могут предоставлять поточно-ориентированные версии, но это не предусмотрено стандартом.
Чтобы иметь возможность использовать генератор случайных чисел в многопоточной среде Вам понадобится реализация, позволяющая переходить в состояние.Таким образом, вы можете сохранить одно значение состояния на поток и генерировать случайные числа хорошего качества без синхронизации.
Стандартная библиотека C не предоставляет никаких вариантов.Это делает 100% -ную переносимость практически невозможной. Выбор использования будет зависеть от вашей среды, которую вы должны упомянуть как часть вашего вопроса, чтобы получить точные ответы.
Посмотрите на GNUНаучная библиотека , которая утверждает, что обеспечивает Многопоточный генератор случайных чисел .