2016-09-29 1 views
0

私はpthreadsを使用するオブジェクトを持っています。そのコンストラクタは複数のスレッドを作成します。実行中のpthreadを持つオブジェクトを削除するとどうなりますか?

クラスのデストラクタは、これらすべてのスレッドでpthread_joinを呼び出します。

削除中に何が起こるのですか?つまり、削除演算子が突然オブジェクトの割り当てを解除しようとすると、終了していないスレッドはどうなりますか?

すべての返信をお待ちしております。 :)

+0

最高の場合、プログラムがクラッシュします。そうでなければ、あなたのプログラムの記憶に残っています – Hayt

答えて

0

あなたのデストラクタは、結合されたスレッドがすべて終了するまでブロックします。

pthread_join

pthread_joinを()関数が終了するスレッド によって指定されたスレッドを待ちます。そのスレッドがすでに終了している場合は、 pthread_join()がすぐに戻ります。スレッド で指定されたスレッドは結合可能でなければなりません。

スレッドに参加しないと、引き続き実行されます。これは、未定義のビヘイビアを呼び出すかどうか(たとえば、デストラクタがまだ実行中のスレッドの1つから抜けた後に削除されたオブジェクトを参照しようとするなど)によって、さまざまな結果を招く可能性があります。

pthread_tオブジェクトを削除すると、システムによって結果が変わる可能性があります(pthreadのすべての実装についてはわかりませんが)一般にスレッドを表す基本システムオブジェクトへの参照のみです。したがって、そのスレッドへの参照が失われ、後でそのスレッドに参加できなくなる可能性がありますが、スレッドは引き続き実行されます。

関連する問題