当随机数遇上多线程

tenix 2004-08-10 02:42:56
如果一个线程内部要用到随机数,必须在其开始的地方进行randomize()初始化,其它任何地方都不行。但是当多个线程同时启动时,randomize()的结果是一样的。产生的随机数列也是相同的。
高手如何解决这个问题?我想了个办法在主程序里面为每个线程产生随机的随机数种子,再启动线程。但是如何设置随机数种子我不知道了。
...全文
254 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjy1001 2004-08-10
  • 打赏
  • 举报
回复
我帮你写一个随机函数吧,你用我的随机函数应该不会出现你说的现象……

#include <stdlib.h>

int MyRand()
{
int liv_tmp[4];
TDateTime ldv_tmp = Now();
WORD liv_hh, liv_mm, liv_ss, liv_ms;
ldv_tmp.DecodeTime(&liv_hh, &liv_mm, &liv_ss, &liv_ms);

for (int i = 0; i < 4; i++)
{
liv_tmp[i] = rand();
}

return (liv_tmp[0] * liv_hh + liv_tmp[1] * liv_mm + liv_tmp[2] * liv_ss
+ liv_tmp[3] * liv_ms);
}

应该可以满足楼主的要求的了,即使是线程,仍然出现相同的概率非常接近0
过客猫2022 2004-08-10
  • 打赏
  • 举报
回复
randomize()只要运行一次就可以了
static bool bInit = false;
if( !bInit )
{
randomize();
bInit = true;
}
constantine 2004-08-10
  • 打赏
  • 举报
回复
我到觉得一般楼上两位大哥的方法就够了,如果你真的象haidao17那样认为,可以学二楼自己写,不难,弄多几层数学函数就可以了吧
haidao17 2004-08-10
  • 打赏
  • 举报
回复
自己做随机函数,那么就没问题了,如楼上所说……
但还是不够随机 嘿嘿
COKING 2004-08-10
  • 打赏
  • 举报
回复
include<math.h>

sin(GetTickCount());
myy 2004-08-10
  • 打赏
  • 举报
回复
随机数种子:

void srand(unsigned seed);

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧