pthreads : questions about concurrency and lifetime

Pieter de Goeje pieter at degoeje.nl
Tue Nov 28 22:02:13 UTC 2006


On Tuesday 28 November 2006 22:33, Garrett Cooper wrote:
> Hello once again,
>     Just wondering about pthreads now. I know that the lifetime (scope)
> of a regular procedural function in C is simple.. it's from the top of
> the function body to the bottom of the function body (assuming no
> infinite loops are injected). Example:
>
> (void*) function(void*) {/* lifetime of function is here. */ }
>
> However looking over pthread(3), there are a number of different
> functions for killing threads and exiting child threads, in order
> terminate child threads (and maybe to get back to the main thread of
> execution in a program).
>
> So my question is, once the end of a function body is reached that was
> made using pthread_create(), does the thread exit and 'destroy' itself
> or do I need to do 'manual' cleanup, i.e. run pthread_detach(3),
> pthread_exit(3), or pthread_kill(3)?

There are three ways to cleanup a thread:
1) pthread_detach(3)
2) pthread_join(3)
3) creating a thread with PTHREAD_CREATE_DETACHED attribute set, see 
pthread_attr_setdetachstate(3)

Calling pthread_detach(3) directly after you created the thread is an easy way 
to create an "uncontrolled" thread. Effectively the same as #3. The thread 
will cleanup automatically after the thread function returns.

-- Pieter de Goeje


More information about the freebsd-hackers mailing list