linuxの下のcの中でどのように安全にスレッドを閉じることができます

1377 ワード

マルチスレッド終了には、(1)実行完了後に暗黙的に終了する方法、(2)スレッド自体による呼び出しpthread_の表示exit関数の終了;    pthread_exit (void * retval) ;(3)他スレッド用pthread_cance関数終了:pthread_cance (pthread_t thread) ; 
イベントで実現します.
サブスレッドでは、ループ内でeventが検出されます.
while(!e.is_active())
{
  ...
}
ループを終了すると、自然returnが返されます.このようなスレッドは優雅に終わります.
注:待機しない検出関数を選択します.
pthreadスレッドには、joinable(非分離)ステータスとdetachable(分離)ステータスの2つのステータスがあり、デフォルトはjoinableです.
joinable:スレッド関数が自分で終了またはpthread_を返すとexitでは、スタック、スレッド記述子など、スレッドに使用されるリソースは解放されません(8 k以上あると言われていますが、経験がありません).
detachable:スレッドが終了すると自動的にリソースが解放されます.
Linux man page said:
When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore, pthread_join must be called  once  for each joinable thread created to avoid memory leaks.
したがって、joinableスレッドの実行後にpthread_は使用されません.joinだとメモリが漏れてしまいます.
解決策:
1.//スレッド作成前にPTHREADを設定_CREATE_DETACHEDプロパティ
pthread_attr_t attr; pthread_t thread; pthread_attr_init (&attr); pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED); pthread_create (&thread, &attr, &thread_function, NULL); pthread_attr_destroy (&attr);
2.スレッドがjoinableの場合pthread_を使用joinはスレッドの戻り値を取得し、リソースを解放します.
3.スレッドがjoinableの場合、pthread_をスレッドで呼び出すこともできます.detach(pthread_self());自分を分離します.