Thread termination, Name, Synopsis – Comtrol eCos User Manual

Page 49: Description, Valid contexts

Advertising
background image

Thread termination

Name

cyg_thread_exit, cyg_thread_kill, cyg_thread_delete

— Allow threads to terminate

Synopsis

#include

<

cyg/kernel/kapi.h

>

void cyg_thread_exit(void);

void cyg_thread_kill(cyg_handle_t thread);

void cyg_thread_delete(cyg_handle_t thread);

Description

In many embedded systems the various threads are allocated statically, created during initialization, and never
need to terminate. This avoids any need for dynamic memory allocation or other resource management facilities.
However if a given application does have a requirement that some threads be created dynamically, must terminate,
and their resources such as the stack be reclaimed, then the kernel provides the functions

cyg_thread_exit

,

cyg_thread_kill

, and

cyg_thread_delete

.

cyg_thread_exit

allows a thread to terminate itself, thus ensuring that it will not be run again by the scheduler.

However the cyg_thread data structure passed to

cyg_thread_create

remains in use, and the handle returned

by

cyg_thread_create

remains valid. This allows other threads to perform certain operations on the terminated

thread, for example to determine its stack usage via

cyg_thread_measure_stack_usage

. When the handle and

cyg_thread structure are no longer required,

cyg_thread_delete

should be called to release these resources. If

the stack was dynamically allocated then this should not be freed until after the call to

cyg_thread_delete

.

Alternatively, one thread may use

cyg_thread_kill

on another This has much the same effect as the affected

thread calling

cyg_thread_exit

. However killing a thread is generally rather dangerous because no attempt is

made to unlock any synchronization primitives currently owned by that thread or release any other resources that
thread may have claimed. Therefore use of this function should be avoided, and

cyg_thread_exit

is preferred.

cyg_thread_kill

cannot be used by a thread to kill itself.

cyg_thread_delete

should be used on a thread after it has exited and is no longer required. After this call the

thread handle is no longer valid, and both the cyg_thread structure and the thread stack can be re-used or freed. If

cyg_thread_delete

is invoked on a thread that is still running then there is an implicit call to

cyg_thread_kill

.

Valid contexts

cyg_thread_exit

,

cyg_thread_kill

and

cyg_thread_delete

can only be called from thread context.

49

Advertising