📄 context.c.txt
字号:
any mistakes,send email to netxiong@263.net
本文件主要提供tq_context调度任务队列,一种安全的任务队列,因为他不存在中断问题,只是使用信号量进行同步。所以考虑的问题比较少。使用安全。
***********************基本数据结构**************************************
static DECLARE_TASK_QUEUE(tq_context); //声明一个tq_context,和tq_timer一样。
*************************************************************************
**********************基本函数***************************
(1):int start_context_thread(void)
#初始化函数
#使用kernel_thread(context_thread, NULL, CLONE_FS | CLONE_FILES)
建立一个内核线程。
(2):static int context_thread(void *dummy)
#内核线程主程序
# for (;;) 主要的部分是一个死循环
set_task_state(curtask, TASK_INTERRUPTIBLE);将当前线程设置成INTERRUPTIBLE型
add_wait_queue(&context_task_wq, &wait);设置一个等待队列
if (TQ_ACTIVE(tq_context))线检测一下是否tq_context任务队列有元素等待执行
set_task_state(curtask, TASK_RUNNING);如果有,把当前进程在设置为可执行状态
schedule();进行调度
run_task_queue(&tq_context); //被 schedule_task唤醒了,说明有元素被挂接到了tq_context 上面,取出来执行。
循环执行。在此进入休眠状态。直到被schedule_task唤醒。
(3):int schedule_task(struct tq_struct *task)
#ret = queue_task(task, &tq_context); //将task加入到任务队列中去。
# wake_up(&context_task_wq); //唤醒context_thread进程。
##注意:schedule_task和context_thread是相辅相成的一对函数。
*************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -