난 후, 별도의 therad에서 일부 조치를 실행 등이 하나의 스레드에 연결하는 프로그램이 있습니다Valgrind의는 '가능한 손실'메모리를보고
#include <boost/thread.hpp>
#include <iostream>
using namespace std;
void f() {
for (int i = 0; i < 100; ++i) cout << i << endl;
}
int main() {
boost::thread t(f);
t.join();
return 0;
}
내가 실행하는 경우 Valgrind의를 그것에, 그것은 아마도 '잃어버린'기억을보고합니다. join()
을 생략하면 논리적 인 것처럼 보입니다.이 경우 프로그램이 종료 될 때 스레드가 계속 실행되기 때문입니다. 그러나 스레드가 완료되면 경고가 없다는 것을 기대할 수 있습니다. 여기
==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 스레드에 문제가 아니면이 완벽하게 정상입니까? 나는 그것에 대한 억압 규칙을 만들 수 있지만 미완성 스레드가있는 경우 경고가 표시되지만 모든 스레드가 완료 될 때가 아니라면 좋을 것입니다.
당신은 (단지 pthread_create/pthread_join을 boost하지 않고) phtread를 제거 할 수 있습니다. – sehe
GCC4.6.2/Boost 1.48에서 재현 할 수 없습니다. 그러나, 나는 여전히 "도달 할 수있는"1 블록에서 8 바이트를 얻는다. 그건 그렇고, 그것을 부스트 대신''완벽하게 잘 작동합니다. –
@sehe : stacktrace로 판단하면 부스트와는 아무런 관련이 없습니다. pthread_create()는 TLS에 대한 구조를 할당합니다. http://www.akkadia.org/drepper/tls.pdf를 참조하십시오. –