3.5.4. Linux内核API之进程调度
3.5.4.1. 数据结构
3.5.4.2. 函数接口
complete
complete函数主要用于唤醒等待队列中的睡眠进程,并能记录等待队列被唤醒的次数,唤醒次数保存在参数的done字段中.此函数通过调用函数__wake_up_locked()唤醒等待队列中 的进程,传递的参数的只能是TASK_INTERRUPTIBLE或者TASK_UNINTERRUPTIBLE状态,并且唤醒进程不是同步的,只能按等待队列中的进程的顺序一个一个的唤醒.
#include <linux/completion.h>
struct completion {
unsigned int done; //保存等待队列的唤醒的次数
wait_queue_head_t wait; //等待队列的头元素
};
//struct completion*为输出参数
void complete(struct completion *);
测试代码
static struct completion comple;
static task_struct *old_thread;
static int __init complete_test_func(void)
{
struct task_struct *result;
wait_queue_t data;
old_thread = current;
kthread_create_on_node(thread_test, NULL, -1, NULL); //创建新的进程
wake_up_process(result);
init_completion(&comple); //初始化全局变量
init_waitqueue_entry(&data, current); //用当前进程初始化等待队列元素
add_wait_queue(&(comple.wait), &data); //将当前进程加入等待队列中
schedule_timeout_uninterruptible(1000); //使等待队列进程不可中断的等待状态
}