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;
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_addr 和 i_data_len 参数指定要复制的数据的位置和数量。 数据的格式必须由初始化和初始化的线程来商定。
线程的堆栈的基地址由 i_stackaddr 参数指定。 如果指定的值为零,那么内核将为堆栈分配内存 (96K)。 当线程终止时,系统将回收该内存。 如果指定了非零值,那么调用者应该为堆栈分配支持内存。 由于堆栈从高地址增长到低地址,因此 i_stackaddr 参数指定线程的堆栈的最高地址。
当线程从入口点例程返回时,它将自动终止。 如果它是进程中的最后一个线程,那么该进程将退出。
执行环境
kthread_start 内核服务只能从 流程 环境中进行调用。
返回值
kthread_start 内核服务将返回下列其中一个值:
| 项 | 描述 |
|---|---|
| 0 | 指示成功启动。 |
| ESRCH | 表示 标识 参数无效。 |