- ベストアンサー
pthread_detach
先日、C,C++カテゴリで質問していたのですが回答がつきませんでしたので、こちらで質問させていただきます。 pthread_create()してpthread_detachしているとします。 pthread_create()する前にmallocで領域確保した変数を引数として生成スレッドに渡しているとすると、detachした時点でmallocで確保した領域はfree()されるのでしょうか? それともメモリリークとなりますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どなたも回答されてないですので回答します。但し、マルチスレッドプログラミングは実践での経験はありませんので自信なしです。(そのつもりで読んでください) >detachした時点でmallocで確保した領域はfree()されるのでしょうか? freeされません。 メモリーのfreeを明示的に行わない限り(スレッドが終了しても)解放されることはありません。 又、pthread_detachしてもdetachされたスレッドは終了しません。pthread_detachは、スレッドの待ち合わせを単純に放棄するだけであり、detachされたスレッドは、そのまま生き続けます。もし、生成したスレッドを停止(取消)させるのでしたら、pthread_cancelがあります。しかしながら、pthread_cancelを行っても、mallocしたメモリは自動的には解放されませんので、これを明示的に解放する仕組みをプログラマが実装する必要があります。又pthread_cancelについても、いろいろと問題がつきまとうので、できれば使用しないほうが良い、とマルチスレッドの専門家がある本で書いてますので、pthread_cancelを使用する場合は、十分に注意すべきです。(私がマルチスレッドでプログラミングする事態が起こったときは、極力pthread_cancelを呼ばないで済むような設計をするつもりです)
お礼
御回答ありがとうございます。 理解しやすい説明で助かりました。 やはり、mallocとfreeは対になるべきなんですね。 助かりました。