睡眠方式:wait_event, wait_event_interruptible
唤醒方式:wake_up (唤醒时要检测条件是否为真,如果还为假则继续睡眠,唤醒前一定要把条件变为真)
2. 手工休眠方式一:
1)建立并初始化一个等待队列项
DEFINE_WAIT(my_wait) <== wait_queue_t my_waitinit_wait(&my_wait)
2)将等待队列项添加到等待队列头中,并设置进程的状态
prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)
3)调用schedule(),告诉内核调度别的进程运行
4)schedule返回,完成后续清理工作
finish_wait()
3. 手工休眠方式二:
1)建立并初始化一个等待队列项:
DEFINE_WAIT(my_wait) <== wait_queue_t my_waitinit_wait(&my_wait)
2)将等待队列项添加到等待队列头中:
add_wait_queue
3)设置进程状态
__set_current_status(TASK_INTERRUPTIBLE)
4)schedule()
5)将等待队列项从等待队列中移除
remove_wait_queue()
其实,这种休眠方式相当于把手工休眠方式一中的第二步prepare_to_wait拆成两步做了,即prepare_to_wait <====add_wait_queue + __set_current_status,其他都是一样的。
4. 老版本的睡眠函数sleep_on(wait_queue_head_t *queue):
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)