2011-01-13 6 views
3

私はお互いに通信する2つのスレッドを持っています。各スレッドは 'while(1)..'を使用します。今度は、特定の条件が満たされたときにスレッドを終了させ、アプリケーションを終了させる必要があります。POSIXスレッドとスレッドから抜ける

私の質問:スレッドから「返す(NULL)」だけで安全ですか、「pthread_exit」または「pthread_join」関数も使用する必要がありますか?

答えて

3

スレッド関数からnullを返すことは安全です。それらを待つコードはOKでなければなりません。

POSIXはpthread_exit()の言う:

pthread_exitへの暗黙の呼び出しは()したとき、それを作成するために使用された()は最初の起動ルーチンからのリターンを呼び出されたメインているスレッド以外のスレッド。

あなたは、スレッドが切り離さ属性で作成またはpthread_detach()して後に剥離した場合を除きpthread_join()とのスレッドを待つために何かが必要です。

3

pthread_exit(NULL)を呼び出し、スレッドの初期関数の最後にNULLを返すことは同等である必要があります。しかし、これらのいずれかを単独で実行すると、リソースリークが発生します。これを回避するには、別のスレッドのスレッド上でpthread_joinを呼び出すか、スレッドを作成する前にデタッチ状態で開始するように設定するか、またはpthread_detachを呼び出してスレッドをデタッチ状態にする必要があります。