3

n プロセッサ システムで使用するために、単純なパスワード クラッカーを並列化する必要があります。私の考えは、n個のスレッドを作成し、それらが終了するにつれて、それらにますます多くの仕事を与えることです。

スレッドがいつ終了したかを知る最良の方法は何ですか? ミューテックス?他のスレッドが実行されている間、このミューテックスを常にチェックするのは高価ではありませんか?

4

3 に答える 3

5

単純なキュー構造を持つことができます-好きなデータ構造を使用してください-そして、アイテムを追加/削除するときにミューテックスを使用するだけです。

スレッドが必要な作業を十分に大きな「チャンク」で取得する場合、ミューテックスでの競合はほとんどないため、オーバーヘッドはほとんどありません。

たとえば、各スレッドが一度に約 1 秒の作業を取得し、1 秒間独立して作業する場合、mutex に対する操作はほとんどありません。

スレッドは、作業がなくなったときに終了する可能性があります。その後、メイン スレッドは pthread_join を使用して待機できます。

于 2009-02-17T22:28:17.110 に答える
1

通常、非同期ジョブが終了するのを待ちたいこの種のものには「条件変数」を使用します。

条件変数は、基本的にミューテックスで保護された単純なシグナルです。Pthreadには条件変数があります(たとえば、pthread_cond_create(...)関数を参照してください)。

于 2009-02-21T02:42:55.680 に答える
1

スレッド間でメッセージ キューを使用する:-

マスター -> プロセス (これで行くと言っています)。プロセス -> マスター (終わったと言って - もっとくれ、または、結果を見つけた!)

これを使用すると、スレッドはシステムが閉じたときにのみ閉じます。それ以外の場合は、データを処理しているか、メッセージ キューで待機しています。

このように、MCP (私は常にそう言いたかったのです!) は、単純にメッセージを処理し、次の作業を待っているスレッドにジョブを渡します。

これは、常にスレッドを作成および破棄するよりも効率的です。

于 2009-02-17T22:44:32.123 に答える