This FAQ originated on Usenet in the early-to-mid 1990s; it survives here mainly for historical curiosity rather than as a source of current best practices.
By default, POSIX threads are created non-detached. You need to perform a join on each non-detached thread, or else storage will never be freed up when they exit. As an alternative, you can create detached threads, for which storage will be freed as soon as they exit. This latter approach is generally better; you should only create non-detached threads if you explicitly need to know when or if they exit.