10
で作業する場合、そのようなこの一つとして、スレッドに参加する「可能性が失われた」メモリを報告しますそれは、「おそらく失われた」記憶を報告します。 join()
を省略すると、これは論理的です。その場合、プログラムが終了してもスレッドはまだ実行されているためです。しかし、スレッドが終了した場合、私は警告がないことを期待します。ここで Valgrindのは、私は別のtheradで何らかのアクションを実行するプログラムを持ってブーストスレッド
==8797== 288 bytes in 1 blocks are possibly lost in loss record 2 of 3
==8797== at 0x4A1F8B3: calloc (vg_replace_malloc.c:467)
==8797== by 0x400F289: allocate_dtv (in /lib64/ld-2.4.so)
==8797== by 0x400F34D: _dl_allocate_tls (in /lib64/ld-2.4.so)
==8797== by 0x53EF981: [email protected]@GLIBC_2.2.5 (in /lib64/libpthread-2.4.so)
==8797== by 0x4B3311D: boost::thread::start_thread() (in /home/egbomrt/BOOST/inst_1_47_0/lib/libboost_thread.so.1.47.0)
==8797== by 0x40A20C: boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type) (thread.hpp:204)
==8797== by 0x406295: main (main.cpp:12)
これはブーストスレッド、POSIXスレッドの問題ですか、これは完全に正常ですか?私はそれのための抑制ルールを作成することができますが、未完了のスレッドがある場合は警告が表示されますが、すべてのスレッドが終了した場合は表示されません。
自分でphtreadを削除することができます(ブーストなしでpthread_create/pthread_joinを使用するだけで) – sehe
GCC4.6.2 /ブースト1.48で再現できません。しかし、私は1ブロック "まだ到達可能"で8バイトを取得します。ちなみに、Boostの代わりに ''で完全に正常に動作します。 –
@sehe:スタックトレースから判断すると、ブーストとは関係ありません。 pthread_create()はTLSの構造を割り当てます。 http://www.akkadia.org/drepper/tls.pdfを参照してください。 –