1/**2* schedule_delayed_work - put work task in global workqueue after delay3* @dwork: job to be done4* @delay: number of jiffies to wait or 0 for immediate execution5*6* After waiting for a given time this puts
intqueue_work_on(intcpu,structworkqueue_struct*wq,structwork_struct*work); 3.3 queue_delayed_work queue_delayed_work会在任务提交到工作队列之前等待一段时间,由delay参数来指定。 ]intqueue_delayed_work(structworkqueue_struct*wq,structdelayed_work*dwork,unsignedlongdelay); 3.4 queue_delayed_work_on que...
staticinlineboolschedule_delayed_work(structdelayed_work *dwork,unsignedlongdelay); queue_work 跟schedule_work类似,区别在于schedule_work是在系统默认的工作队列上执行一个work,而queue_work 需要自行指定工作队列。 其实,schedule_work是利用queue_work实现的,例如系统默认的工作队列system_wq: staticinlineboolschedu...
queue_work 跟schedule_work类似,区别在于schedule_work是在系统默认的工作队列上执行一个work,而queue_work 需要自行指定工作队列。 其实,schedule_work是利用queue_work实现的,例如系统默认的工作队列system_wq: staticinlineboolschedule_work(structwork_struct*work){returnqueue_work(system_wq,work);} queue_delay...
nr_active:活跃的 work 数量 max_active:活跃的最大 work 数量 delayed_works:延迟执行的 work 挂入本链表 pwqs_node:用于添加到 workqueue 链表中 mayday_node:用于添加到 workqueue 链表中 worker_pool: 工人的集合。pool_workqueue 和 worker_pool 是一对一的关系,worker_pool 和 worker 是一对多的关系。
struct delayed_work{struct work_struct work;struct timer_list timer;};intschedule_delayed_work(struct delayed_work*dwork,unsigned long delay/*jiffies*/){returnqueue_delayed_work(system_wq,dwork,delay);}#defineDECLARE_DELAYED_WORK(n,f)\
等待队列(waitqueue) linux驱动中,阻塞一般就是用等待队列来实现,将进程停止在此处并睡眠下,直到条件满足时,才可通过此处,继续运行。在睡眠等待期间,wake up时,唤起来检查条件,条件满足解除阻塞,不满足继续睡下去。 工作队列(workqueue) 工作队列,将一个work提交到workqueue上,而这个workqueue是挂到一个特殊内核进程上...
--> 创建线程queue并加以名字:test_workqueue = create_singlethread_workqueue("name_of_this_queue"); --> 运行queue:queue_delayed_work(test_workqueue, &test_delayed_work, delay_time); // 定义在:kernel/workqueue.c, 其中delay_time是延迟多少时间来运行queue。
--> 创建线程queue并加以名字:test_workqueue = create_singlethread_workqueue("name_of_this_queue"); --> 运行queue:queue_delayed_work(test_workqueue, test_delayed_work, delay_time); // 定义在:kernel/workqueue.c, 其中delay_time是延迟多少时间来运行queue。
INIT_DELAYED_WORK_DEFERRABLE( work, func ); INIT_* 做更加全面的初始化结构的工作,在第一次建立结构时使用。 任务结构体的初始化完成后,接下来要将任务安排进工作队列。 可采用多种方法来完成这一操作(参见 清单 7)。 首先,利用 queue_work 简单地将任务安排进工作队列(这将任务绑定到当前的 CPU)。 或者...