是否需要调用每个线程或每个进程的srand()C函数来播种随机数?

标题说得很多。

PS。 这是用于C ++ Windows程序。

根据srand()上的MSDN文档 (假设您使用的是Microsoft的C运行时库),种子是线程本地的,因此您需要为使用rand()每个线程调用srand() rand() 。 请注意,在其他实现中可能不是这种情况。

从MSDN引用:

srand函数设置在当前线程中生成一系列伪随机整数的起始点。

即使答案不是平台特定的,我建议你避免使用srand() ,而是使用<random> 。 C ++ 11 <random>库不仅在多线程程序中提供了清晰的语义,而且为随机数生成提供了更好的工具。 它提供了几个不同的随机数发生器,以满足不同的质量,速度和尺寸要求,以及许多标准的发行版,所以你不会犯使用rand时经常犯的错误。

不,根据标准,因为一旦你调用srand()它会影响来自所有线程的rand()调用。

C库函数srand()与所有其他函数一样是单线程的,也就是说,如果从一个线程调用srand() ,它会影响其他线程中rand()生成的数字序列。

但是微软提供了非标准的srand()需要你从所有线程调用它。