0

Visual Studio 2010 に統合された OpenMP を使用したマルチスレッドを使用して、高速なパスワード ジェネレーターを作成しようとしています。

文字列から Char をランダムに取り出すこの基本的な文字列ジェネレーターがあるとします。

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 に答える