2009-06-30 12 views
6

私は作成したスレッドごとにpthread_joinする必要がありますか? pthread_joinを()のmanページから

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until thread performs pthread_join on it. Therefore, pthread_join must be called once for each joinable thread created to avoid memory leaks.

、それは私が漏洩することを防止するために作成した各スレッドに参加する必要がありということですか?しかし、参加者は発信者をブロックします。

お願いします。

答えて

8

スレッドに参加するにはが必要ですが、それは良い考えです。 pthread_join()を呼び出さなければ、スレッドが終了する前にmain()関数が返る可能性があります。この場合、pthread_join()は、他のスレッドが処理を終了するまでアプリケーションを待機させます。さらに、スレッドに参加すると、戻り値をチェックしてすべてがスムーズに行われ、スレッドと共有していたリソースをすべてクリーンアップする機会が与えられます。

EDIT:あなたにとって興味深い機能は、pthread_detach()です。 pthread_detach()は、スレッドの終了後にスレッドのストレージをクリーンアップすることができるため、その後スレッドに参加する必要はありません。

+2

pthread_attr_setdetachstateを使用してPTHREAD_CREATE_DETACHED属性のスレッドを作成することもできます – Hasturkun

+0

このようなパラメータがあると思いましたが、呼び出された内容を覚えていませんでした。私の記憶をリフレッシュしてくれてありがとう! –

関連する問題