网站建设做一个要多久,商城网站 备案,网页设计的目的,建设电子网站试卷文章目录 背景基本代码和用法内核态sleep效果其他 背景
Linux提供了多种同步机制#xff0c;其中complete就是一种。complete能够阻塞等待状态同步#xff0c;并且等待对方释放中会调用schedule让出CPU。如果想在内核中等待一个固定时长继续执行他是一个非常不错的选择。有点… 文章目录 背景基本代码和用法内核态sleep效果其他 背景
Linux提供了多种同步机制其中complete就是一种。complete能够阻塞等待状态同步并且等待对方释放中会调用schedule让出CPU。如果想在内核中等待一个固定时长继续执行他是一个非常不错的选择。有点类似用户态的sleep功能
基本代码和用法
//头文件
#include linux/completion.h//定义
struct completion done;//初始化
init_completion(done);// 两种等待方式-在上下文a中进行
wait_for_completion(done); //一直等待释放
if (!wait_for_completion_timeout(done, msecs_to_jiffies(5 * 1000))) //等待5秒超时
{printk(wait timeout\n);
}// 释放方式在上下文b中释放
complete(ent-done);内核态sleep效果
可以定义一个函数在函数中定义等待来达到类似sleep的效果。下面的代码可以直接copy后使用。
void ksleep(int seconds)
{#include linux/completion.hstruct completion done;init_completion(done);printk(will sleep %d seconds\n seconds);wait_for_completion_timeout(done, msecs_to_jiffies(seconds * 1000));
}其他
可以利用wait_for_completion_timeout来达到一个类似sleep的效果。函数会阻塞在这里。可以在某个上下文中启动一个work来处理某个事情处理完成后释放complete。该上下文中等待completion完成。work使用方法参考兄弟篇文章