2016-10-31 10 views
0

編集:私ができない使用ミューテックスまたはスリープ()または私達は私の割り当てについてはC.マルチスレッド - 条件が満たされた場合にすべてのスレッドを停止する方法は?

内のスレッドにかなり新しいしているよう待機している任意のタイプIは、スレッドを使用してブルートフォースパスワードクラッカーを作ることです。アイデアはパスワードのハッシュと塩を持っているので、アルファベットのA-Z、a-z、0-9の組み合わせを使用し、crypt_r関数を使用して暗号化し、それをハッシュと塩と比較します。

2つのスレッドを作成しました.1つは小文字をチェックし、もう1つはアルファベットのすべての文字をチェックします。

私の問題は、小文字のスレッドがパスワードを見つけたら、それを与えるが、2番目のスレッドはバックグラウンドで実行し続けるということです。

どのようにグローバル変数を使用せずに2番目のスレッドを停止できますか?

は、ここで私は、スレッドに取り掛かる方法です加わり:

for (int i = 0; i < nbThread; ++i) { 
    pthread_join(tabThread[i], NULL); 
    pthread_join(tabThread2[i], NULL); 
} 

はあなたの時間と助けてくれてありがとう!

+0

実行中のスレッドを停止するにはどうすればいいですか?(http://stackoverflow.com/questions/18826853/how-to-stop-a-running-pthread-thread) –

答えて

0

pthread_join()を使用すると、スレッド終了後に何かしたいことがない限り呼び出されません。これは便利な機能であり、必要ではありません。メインスレッドはpthead_join()呼び出しなしでpthread_exit()で終了し、他の2つのスレッドはどちらかが成功するまで続行できます。いずれかのスレッドがパスワードを見つけた場合は、単にプロセスを終了し(_exit()または_Exit())、プロセス終了時に他のスレッドは終了します。

+0

ありがとうございます!私のスレッドでは、 "パスワードが見つかったら - > pthread_exit(NULL)"を追加して動作しているようです。 –

1

まあ、あなたはpthread_cancelを持っています。それは、スレッドを終了する時間を知らせる良い方法です。スレッドはキャンセルの可能性を認識し、適切に処理する必要があります。

そして、あなたはちょうどpthread_killlでスレッドを殺すことができないのです。 pthread_killを使用すると、リソースがリークする可能性があることに注意してください。

+0

pthread_cancelを糸?私は自分のスレッドに構造体を渡しますが、構造体にはスレッドへのポインタが含まれていません。 –

+0

@JohnLivingstonキャンセルしたいスレッドの 'pthread_t'があればどこからでも呼び出すことができます。 –

関連する問題