kthread_start 内核服务

用途

启动先前创建的仅内核线程。

语法

#include <sys/thread.h>
int kthread_start ( tid,  i_func,  i_data_addr,  i_data_len,
  
i_stackaddr
,  
i_sigmask)
tid_t tid;
int (*i_func) (void *);
void *i_data_addr;
size_t i_data_len;
void *i_stackaddr;
sigset_t *i_sigmask;

参数

描述
tid 指定要启动的仅内核线程。
i_Func 指向仅限内核的线程的入口点例程。
i_data_addr 将指向将传递到入口点例程的数据。
i_data_len 指定该数据块的长度。
i_stackaddr 为仅内核线程指定堆栈的基本地址。
i_sigmask 指定在新仅内核线程开始执行时要阻止传递的信号集。

描述

kthread_start 内核服务将启动由 标识 参数指定的仅内核线程。 该线程必须先前已使用 thread_create 内核服务创建,并且它的状态必须为 TSIDL

此内核服务会初始化并调度处理器的线程。 其状态更改为 TSRUN。 该线程已初始化,因此它将在 i_Func 参数指定的入口点开始执行,并且 i_sigmask 参数指定的信号将被阻止传递。

线程的入口点会获得一个参数,即指向复制到线程堆栈的基础上的数据块的指针。 i_data_addri_data_len 参数指定要复制的数据的位置和数量。 数据的格式必须由初始化和初始化的线程来商定。

线程的堆栈的基地址由 i_stackaddr 参数指定。 如果指定的值为零,那么内核将为堆栈分配内存 (96K)。 当线程终止时,系统将回收该内存。 如果指定了非零值,那么调用者应该为堆栈分配支持内存。 由于堆栈从高地址增长到低地址,因此 i_stackaddr 参数指定线程的堆栈的最高地址。

当线程从入口点例程返回时,它将自动终止。 如果它是进程中的最后一个线程,那么该进程将退出。

执行环境

kthread_start 内核服务只能从 流程 环境中进行调用。

返回值

kthread_start 内核服务将返回下列其中一个值:

描述
0 指示成功启动。
ESRCH 表示 标识 参数无效。