В заметке речь пойдет о использовании pthread_exit (), вернее о том, что ведет эта ф-я на разных платформах по разному !
Пример :
#includeитог запуска скомпилированной проги на разных платформах :#include #include class TestClass { public: int value; TestClass(int parameter) { std::cout << "Constructed " << parameter << "\n"; value=parameter; } ~TestClass() { std::cout << "destructed " << value << "\n"; } }; extern "C" { void *body_forexit(void * param) { TestClass a(1); sleep(1); pthread_exit((void *)a.value); return (void *)a.value; } void *body_forreturn(void * param) { TestClass b(2); sleep(2); return (void *)b.value; } } // extern "C" int main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, body_forexit, NULL); pthread_detach(thread1); pthread_create(&thread2, NULL, body_forreturn, NULL); pthread_detach(thread2); pthread_exit(NULL); return 0; }
Linux desktop 2.6.28-15-generic #49-Ubuntu SMP Tue :
andrey@desktop:~/dev/threads$ ./a.out Constructed 1 Constructed 2 destructed 1 destructed 2
7.0-RELEASE FreeBSD :
Constructed Constructed 1 2 destructed 2
И того - на фре7 при использовании pthread_exit НЕ ВЫЗЫВАЮТСЯ ДЕСТРУКТОРЫ !!!!!!!
А в линуксе ВЫЗЫВАЮТСЯ !!!
Имхо правильнее использовать ретурн , чтоб небыло неожиданности :)
Комментариев нет:
Отправить комментарий