标题说得很多。
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()
, 它需要你从所有线程调用它。