Xenomai
3.0-rc7
|
Cobalt/POSIX thread management services. More...
![]() |
Functions | |
int | pthread_create (pthread_t *ptid_r, const pthread_attr_t *attr, void *(*start)(void *), void *arg) |
Create a new thread. More... | |
int | pthread_setmode_np (int clrmask, int setmask, int *mode_r) |
Set the mode of the current thread. More... | |
int | pthread_setname_np (pthread_t thread, const char *name) |
Set a thread name. More... | |
int | pthread_kill (pthread_t thread, int sig) |
Send a signal to a thread. More... | |
int | pthread_join (pthread_t thread, void **retval) |
Wait for termination of a specified thread. More... | |
Cobalt/POSIX thread management services.
int pthread_create | ( | pthread_t * | ptid_r, |
const pthread_attr_t * | attr, | ||
void *(*)(void *) | start, | ||
void * | arg | ||
) |
Create a new thread.
This service creates a thread managed by the Xenomai nucleus in dual kernel configuration.
The new thread signal mask is inherited from the current thread, if it was also created with pthread_create(), otherwise the new thread signal mask is empty.
Other attributes of the new thread depend on the attr argument. If attr is NULL, default values for these attributes are used.
Returning from the start routine has the same effect as calling pthread_exit() with the return value.
ptid_r | address where the identifier of the new thread will be stored on success; |
attr | thread attributes; |
start | thread start routine; |
arg | opaque user-supplied argument passed to start; |
When creating or shadowing a Xenomai thread for the first time in user-space, Xenomai installs a handler for the SIGSHADOW signal. If you had installed a handler before that, it will be automatically called by Xenomai for SIGSHADOW signals that it has not sent.
If, however, you install a signal handler for SIGSHADOW after creating or shadowing the first Xenomai thread, you have to explicitly call the function cobalt_sigshadow_handler at the beginning of your signal handler, using its return to know if the signal was in fact an internal signal of Xenomai (in which case it returns 1), or if you should handle the signal (in which case it returns 0). cobalt_sigshadow_handler prototype is:
int cobalt_sigshadow_handler(int sig, struct siginfo *si, void *ctxt);
Which means that you should register your handler with sigaction, using the SA_SIGINFO flag, and pass all the arguments you received to cobalt_sigshadow_handler.
int pthread_join | ( | pthread_t | thread, |
void ** | retval | ||
) |
Wait for termination of a specified thread.
If the thread thread is running and joinable, this service blocks the calling thread until the thread thread terminates or detaches. In this case, the calling context must be a blockable context (i.e. a Xenomai thread without the scheduler locked) or the root thread (i.e. a module initilization or cleanup routine). When thread terminates, the calling thread is unblocked and its return value is stored at* the address value_ptr.
If, on the other hand, the thread thread has already finished execution, its return value is stored at the address value_ptr and this service returns immediately. In this case, this service may be called from any context.
This service is a cancelation point for POSIX skin threads: if the calling thread is canceled while blocked in a call to this service, the cancelation request is honored and thread remains joinable.
Multiple simultaneous calls to pthread_join() specifying the same running target thread block all the callers until the target thread terminates.
thread | identifier of the thread to wait for; |
retval | address where the target thread return value will be stored on success. |
Referenced by rt_task_join().
int pthread_kill | ( | pthread_t | thread, |
int | sig | ||
) |
Send a signal to a thread.
This service send the signal sig to the Xenomai POSIX skin thread thread (created with pthread_create()). If sig is zero, this service check for existence of the thread thread, but no signal is sent.
thread | thread identifier; |
sig | signal number. |
int pthread_setmode_np | ( | int | clrmask, |
int | setmask, | ||
int * | mode_r | ||
) |
Set the mode of the current thread.
This service sets the mode of the calling thread, which affects its behavior under particular circumstances. clrmask and setmask are two masks of mode bits which are respectively cleared and set by pthread_setmode_np():
This service is a non-portable extension of the POSIX interface.
clrmask | set of bits to be cleared. |
setmask | set of bits to be set. |
mode_r | If non-NULL, mode_r must be a pointer to a memory location which will be written upon success with the previous set of active mode bits. If NULL, the previous set of active mode bits will not be returned. |
Issuing PTHREAD_CONFORMING is most likely useless or even introduces pure overhead in regular applications, since the Cobalt kernel performs the necessary mode switches, only when required.
int pthread_setname_np | ( | pthread_t | thread, |
const char * | name | ||
) |
Set a thread name.
This service set to name, the name of thread. This name is used for displaying information in /proc/xenomai/sched.
This service is a non-portable extension of the POSIX interface.
thread | target thread; |
name | name of the thread. |