2012-02-20 2 views
11

私はコードの一部が悪いのかを調べることになって、私はトラブル解読を抱えている部分がスレッドに「参加する」ことは何を意味しますか?私のクラスのために

// joining a thread blocks until that thread finishes 
a.join(); 
b.join(); 

ですよスレッドをロックと同じスレッドに参加していますか?この課題のポイントは、あなたはスレッドをロック解除したままにしておくべきではないと思うからです。

答えて

30

これは、あるスレッドが別のスレッドの完了を待つ方法です。

joinの素敵なユースケースがある - main()機能/スレッドがスレッドを作成し、新しく作成されたスレッドも停止し、完了するまでに作成されたスレッドのために(joinを使用して)待つと、単純に終了していない例えば言います!

ここには、一般的なスレッド管理と特にスレッド結合のnice explanationがあります。 code snippetsには、joinの使用例がいくつかあり、使用しないとどうなりますか?

+0

説明のための本当に良いリンクです! –

+0

すばらしいリンク、ありがとうございます! – Dimesio

5

このコメントは本当にすべてを言います。スレッドに参加すると、スレッドが完了するまで待機することを意味します。つまり、別のスレッドが完了するまで現在のスレッドをブロックします。

3

スレッドを2つの別個の実行スレッドに「フォークする」と考えてみましょう。次に、結合は逆です - それはこれらの2つの別々のスレッドが一緒に結合するところです(親だけがそこから続きます)。

3

スレッドに参加するとは、そのスレッドがライブになるまで待つことを意味します。スレッドが終了すると、join()を呼び出すスレッドは実行を継続します。したがって、上記の例では、a.join()b.join()を呼び出すスレッド(おそらくメインスレッド)は、両方のスレッドab(その順番で)が終了してからb.join()のコードを実行し続けるまで待機します。

2
  1. join()はスレッドの実行を完了するまで待機します。
  2. スレッドをdetach()するか、それを管理するスレッドをjoin()する必要があります。
  3. join()もスレッド占有リソースをクリーンアップします。同じ理由で、RAIIクラスのデストラクタでjoin()が呼び出されます。
関連する問題