Never abitrarily remove a thread. You should let it finish via a return from the entry function you used (just as a normal program returns from main).
As piru says, use a signalling policy. When your thread receives the appropriate signal it should finish up and clean up after itself.