srand()、rand() 多线程

vc 10.0 源码

void __cdecl srand (
        unsigned int seed
        )
{
        _getptd()->_holdrand = (unsigned long)seed;
}

int __cdecl rand (
        void
        )
{
        _ptiddata ptd = _getptd();

        return( ((ptd->_holdrand = ptd->_holdrand * 214013L
            + 2531011L) >> 16) & 0x7fff );
}

           多线程采集随机数,每一个线程都要srand()一次而不是主线程srand()  一次,这是由于随机数生成器的内部状态信息保存在线程私有数据上;不在线程里用srand初始化种子,线程就有相同的初始值,生成相同的随机数序列。

你可能感兴趣的:(srand()、rand() 多线程)