2011-03-02 5 views
1

こんにちは 私は変数のカップルを使用するスレッドがあります。 変数は実行時にargv []から決定されます。Cウィンドウのスレッドに引数を渡す最も良い方法は何ですか?

私のオプション私はそれらを見るように:

  1. スレッドがそれらを使用することができるように変数をグローバルにする(スレッドがそれらを変更しないので、それらを保護する必要はありません)。私はグローバル変数がそれほど良くないので、これを使いたくないです。

  2. 変数を保持してスレッドに渡す構造体を作成してください。 varibalesは実際には関連していないので、スレッドの引数以外の意味を持たない「強制的な」構造体になります。オプション1よりも複雑です。

他にもオプションがありますか?どちらが良いと考えられていますか?

ありがとうございます!

+0

スレッドにパラメータを渡すことが許可されている理由があります。他に選択肢が全くない限り、グローバルを使用しないでください。 – casablanca

+0

ここではグローバルを使用しないことを教えています。プロセスのライフタイムに対してパラメータが一定であれば、グローバルには何が問題になりますか?私はドンマテストがそれを投票するので、このアプリを書くことはできません。 –

答えて

8

それは構造体のかなり良い使用のように聞こえるスレッド

の引数以外の意味を持つ「強制」の構造体になります。データメンバーはすべてスレッドに渡す必要があるという事実によって関連しています。

最初のオプションよりも複雑ではありません(構造体の定義といくつかの変数を複雑にすることを考慮しない限り)。ちょっとしたコードですが、コードを見て、スレッドにどのようなデータが与えられているのかを見やすくするのも簡単です。

+0

+1。また、グローバル変数を使用して、スレッド(または他の誰か)が変数を変更する_need_を決定したが、変数がスレッド間で共有されていることを考慮に入れないことを忘れた場合は、後悔します... –

0

2番目の方法は正しい方法ではないことはほとんどありません。グローバルは、特にマルチスレッドの場合はになります。実行中に変更があったとしても、それらが変更されているときにそれらを保護するために何らかの種類のミューテックス(または何か)が必要になるため、問題がさらに発生します。これらのグローバルを使用してすべてがシリアライズされるので、簡単にボトルネックになる可能性があります。

スレッドのパラメータが本当に完全に無関係な場合は、スレッドが何をしているのか、(特に)デザインが何らかの作業を必要としないかどうかを疑問に思う必要があります。スレッドが行うこと自体が論理的でなければならないという単純な理由のために論理的な関係が存在するはずです。入力が本当に無関係な場合、それらの操作はおそらく別々であるべきです。

関連する問題