3

から例を挙げました

https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html

pthread_create. _ pthread_join_ これにより、メモリ リークが発生し、最終的に PC のメモリが不足します。pthread_detachスレッドプログラムを作成した直後に追加すると、メモリ使用量はしばらくすると一定になり、正常に動作します。

私は、スレッドが終了するとき (} 関数を閉じるときpthread_create) に与えられた場合、そのすべてのリソースが消去されるという印象を受けました。

4

1 に答える 1

10

スレッドが終了すると(関数の}を閉じるときに、pthread_createに指定された場合、そのすべてのリソースがクリーンアップされるという印象を受けました。

それは間違った印象です。あなたが言うように、pthread_joinを呼び出すか、スレッドが切り離されたスレッドである場合、すべてのリソースは完成したスレッドのために解放されます。

デタッチされていないスレッドの場合、一部のリソースを保持する必要があります。そうしないと、後でpthread_joinを呼び出してもスレッドの戻り値を取得できませんでした。デタッチされたスレッドは結合できないため、そこから終了値を取得することはできません。

多くの実装では、この戻り値がスレッドのスタックに格納されるため、デタッチされていないスレッドで誰かがpthread_joinを呼び出すまで、スタック全体が保持されます。

于 2012-12-13T17:45:10.113 に答える