pthreads : questions about concurrency and lifetime
Garrett Cooper
youshi10 at u.washington.edu
Tue Nov 28 22:41:20 UTC 2006
Pieter de Goeje wrote:
> 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
>
So that means no, after a function's definition is reached the
thread/resources stay in a semi-'alive' (maybe 'zombified') state?, or
does the kernel cleanup / reclaim all of the resources tied up with the
thread?
-Garrett
More information about the freebsd-hackers
mailing list