1

boost :: threadを明示的または暗黙的にデタッチし(std :: threadとは異なり、デストラクタがデストラクタを実行します)、スレッドが呼び出す関数が例外を処理しないようにすることが保証されているとしましょう...これは一部のリソースをリークしますか?または、関数の終了時にすべてがOSによってクリーンアップされますか?なぜそれが必要なのか疑問に思われる場合:スレッド停止(.join()の場合)を呼び出さずに、非同期の起動を行い、実行中のものを忘れたいです。

4

1 に答える 1

1

ほとんどのリソース (動的に割り当てられたメモリ、さまざまなハンドルなど) はプロセス全体にわたるため、それらを割り当てたスレッドが終了しても解放されません。(一方、スレッドスタックや TLS (スレッドローカルストレージ) などのスレッド関連のリソースは、スレッドの終了時に解放されますが、それはあなたが言っていることではないと思います。)

また、join() は「スレッドの停止」ではなく、スレッドが停止するまで待機しているだけであることに注意してください。つまり、thread1.join() を呼び出すと、thread1 が終了するまで待つだけです。リソースの割り当てを解除しません。

于 2012-06-06T12:12:12.847 に答える