| KTHREAD(9) | Kernel Developer's Manual | KTHREAD(9) |
kthread_create, kthread_exit,
kthread_join —
#include <sys/kthread.h>
int
kthread_create(pri_t
pri, int flags,
struct cpu_info *ci,
void (*func)(void *),
void *arg,
lwp_t **newlp,
const char *fmt,
...);
void
kthread_exit(int
ecode);
int
kthread_join(lwp_t
*l);
Any process can request the creation of a new kernel thread. Kernel threads are not swapped out during memory congestion. The VM space and limits are shared with proc0 (usually swapper).
kthread_create(pri,
flags, ci,
func, arg,
newlp, fmt,
...)PRI_NONE, causing
kthread_create() to select the default
priority level.NULL, the
thread will be created bound to the CPU specified by
ci, meaning that it will only ever execute on
that CPU. By default, the threads are free to execute on any CPU in
the system.kthread_exit() to properly terminate
itself.func(). May be
NULL if not required.NULL, unless
KTHREAD_MUSTJOIN is specified in
flags.NULL.The following flags are defined.
KTHREAD_IDLELSIDL
(idle) state. By default, the threads are created in the
LSRUN (runnable) state, meaning they will
begin execution shortly after creation.KTHREAD_MPSAFEKTHREAD_INTRKTHREAD_TSSCHED_OTHER class (timeshared). The thread's
priority will be dynamically adjusted by the scheduler. Increased
activity by the kthread will cause its priority to fall; decreased
activity will cause its priority to rise. By default, kthreads are
created in the SCHED_RR class, with a fixed
priority specified by pri. Threads in the
SCHED_RR class do not have their priority
dynamically adjusted by the scheduler.KTHREAD_MUSTJOINkthread_exit() will wait until
kthread_join() will be called.kthread_exit(ecode)kthread_join(l)KTHREAD_MUSTJOIN flag and would wait on
kthread_exit.kthread_create() returns 0.
Otherwise, the following error values are returned:
EAGAIN]EAGAIN]RLIMIT_NPROC on the total number of
processes under execution by this user id would be exceeded.| April 21, 2015 | NetBSD 9.1 |