社区
Linux_Kernel
帖子详情
关于延时函数函数INIT_WORK
stuman
2007-09-18 08:56:44
书上说函数INIT_WORK(struct work_struct *work, void (*function)(void *), void *data)初始化一个工作队列,函数的第二个参数是指"一段时间"后调用的函数,那么这个被调用的函数什么时间被调用呢,这个延迟时间是一个确定值还是一个大概的值呢?当被延时的函数被调用时,会不会出现两个线程?因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?
...全文
2898
3
打赏
收藏
关于延时函数函数INIT_WORK
书上说函数INIT_WORK(struct work_struct *work, void (*function)(void *), void *data)初始化一个工作队列,函数的第二个参数是指"一段时间"后调用的函数,那么这个被调用的函数什么时间被调用呢,这个延迟时间是一个确定值还是一个大概的值呢?当被延时的函数被调用时,会不会出现两个线程?因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hefuhua
2007-09-20
打赏
举报
回复
"第一个问题,我想问的是那个延迟时间是编程者人为的设置了某个数值,还是系统自己选择了一个时间.我的问题不在于系统是否精确的延时了."
a.系统会将在处理工作者线程(管理work队列执行的内核线程)占用CUP时立即执行
b.如果设定了schedule_delayed_work(&work,delay);函数delay是时钟节拍,那么就再
你设定后制定的时间执行,如过想回复a状态,就调用cancel_delayed_work(&work);取消
“第二个问题我想问的是在单cpu上那个程序是否会出现两个线程,一个是延时调用的函数,另一个是原先的程序 ”
不是会出现,是一定会出现,首先“处理工作者线程(管理work队列执行的内核线程)”假设是event/0(0表是0号cpu),内核初始化就住内核,再个就是你申请work的线程;“一个是延时调用的函数”而是由event/0处理时间和定时器,你的线程只负责与event/0通讯,其它不管。
“因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?”
不好意思,上面不对
看理解你的意思,如要等时间完成后,那么有void flush_scheduled_work(void)会一直等待,直到work队列全部执行完后。
如像你上面说的,INIT_WORK阻塞不阻塞跟event/0没有关系,反正是队列执行.
stuman
2007-09-18
打赏
举报
回复
老大,谢谢你的回答,但是我无法理解呀
第一个问题,我想问的是那个延迟时间是编程者人为的设置了某个数值,还是系统自己选择了一个时间.我的问题不在于系统是否精确的延时了.
第二个问题我想问的是在单cpu上那个程序是否会出现两个线程,一个是延时调用的函数,另一个是原先的程序
第三个问题我说了两个情况,结果你说"是的",那么究竟哪个是对的呢?
hefuhua
2007-09-18
打赏
举报
回复
"个延迟时间是一个确定值还是一个大概的值呢?"
linux内核是多任务系统,那么她的任务调度是基于时间片的,同时还处理中断和软中断等
所以的延时都时>=来计算的,那么这个值是大概值
“当被延时的函数被调用时,会不会出现两个线程?”
一个工作队列是队列那么就有先后的,那么在同一个cpu上只有一个该队列中的线程;多CPU就是给每CUP的队列可能同时调用,都设为每cpu变量,所以同时出现也不影响。
“因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?”
是的
注意:来自个人理解免不了有误,欢迎拍砖
(linux)
INIT
_
WORK
和
INIT
_DELAYED_
WORK
详解
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起...
自定义队列queue_
work
和内核共享列队schedule_
work
#include <linux/delay.h> #include <linux/rtc.h> static struct delayed_
work
mdwq; static struct
work
queue_struct *mwq; static void delay_
work
_func(struct
work
_struct *
work
) { int i; struct timex txc; struct rtc_time tm;
cancel_delayed_
work
和flush_scheduled_
work
【转】
转自:http://blog.chinaunix.net/uid-9688646-id-4052595.html 是不是觉得很玄?像思念一样玄?那好,我们来看点具体的,比如935行,
INIT
_DELAYED_
WORK
().这是一张新面孔.同志们大概注意到了,在hub这个故事里,我们的讲解风格略有变化,对于那些旧的东西,对于那些在usb-storage里面...
INIT
_DELAYED_
WORK
()
函数
剖析
INIT
_DELAYED_
WORK
()
函数
剖析 2012-02-09 22:00
INIT
_DELAYED_
WORK
()是一个宏,我们给它传递了两个参数.&hub->leds和led_
work
.对设备驱动熟悉的人不会觉得
INIT
_DELAYED_
WORK
()很陌生,其实鸦片战争那会儿就有这个宏了,只不过从2.6.20的内核开始这个宏做了改变,原来这个宏是三个参数,后来改
INIT
_
WORK
和
INIT
_DELAYED_
WORK
详解
转自: 朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连
Linux_Kernel
4,469
社区成员
17,458
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章