INIT_WORK的疑惑
月光宝盒 2012-10-20 05:53:53 书上说函数INIT_WORK(struct work_struct *work, void (*function)(void *), void *data)初始化一个工作队列,函数的第二个参数是指"一段时间"后调用的函数,那么这个被调用的函数什么时间被调用呢,这个延迟时间是一个确定值还是一个大概的值呢?当被延时的函数被调用时,会不会出现两个线程?因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?
好像代码中shudule_work()执行后,相应的回调函数不会立即执行,kernel有个线程调度。
以lcd backlight为例,上层关关闭背光实际是调用 shudule_work()就退出了。但后来lcd sleep了,这个而关背光的调度还没来就会造成白屏,但这个时间点怎么保证呢?
为什么不直接就去开/关背光,而用work,不使用work有什么弊端吗?