0

我正在尝试使用集成到 Visual Studio 2010 中的 OpenMP 的多线程来制作快速密码生成器。

假设我有一个基本的字符串生成器,它可以从字符串中随机提取字符。

srand(time(0)); 
for (i = 0; i < length; ++i)
{
    s=pwArr[rand()%(pwArr.size()-1)];
    pw+=s;
}

return pw;

现在,基本思想是使用 OpenMP 启用多线程,以实现真正快速的随机字符查找,如下所示:

srand(time(0)); 
#pragma omp parallel for
for (i = 0; i < length; ++i)
{
    s=pwArr[rand()%(pwArr.size()-1)];
    pw+=s;
}

return pw;

但是,这只会使每个线程同时执行自己单独的密码生成器实现,并且我最终会在我的字符串中得到重复。

一个示例输出是

ndxP1k1kP1k

此外,对于较大的字符串,这会产生可怕的后果:Debug Assertation Failed 错误。

我只是在错误的工作中使用了错误的工具吗?

4

1 回答 1

1

要回答您的问题,并将@CrazyCasta 的评论变成答案:

是的,您在错误的工作中使用了错误的工具

rand不能像您希望的那样可并行化,并且由于生成任何合理长度的密码已经非常快,因此很难理解您为什么要打扰。

然而,并行伪随机数生成器的主题是一个有趣的话题,并且有很多关于它们的已发表工作,甚至在 SO 上也有一些问题和很好的答案。我建议你把注意力集中在更多的学习上,当你对它们有更多的了解后,再回到你的编程上。

于 2012-12-15T09:42:54.120 回答