1. workqueque简介
- 在内核中创建一个线程;可以多CPU核并行处理;
- 推后执行;可以在进程上下文执行;
- 允许被重新调度甚至睡眠。
- 比tasklet更有效。基本可以取代。
2. 参考引用,数据结构
struct work_struct {
atomic_long_t data; /*工作处理函数func的参数*/
#define WORK_STRUCT_PENDING 0 /* T if work item pending execution */
#define WORK_STRUCT_STATIC 1 /* static initializer (debugobjects) */
#define WORK_STRUCT_FLAG_MASK (3UL)
#define WORK_STRUCT_WQ_DATA_MASK (~WORK_STRUCT_FLAG_MASK)
struct list_head entry; /*连接工作的指针*/
work_func_t func; /*工作处理函数*/
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
- 这些工作以队列结构组织成工作队列(workqueue),其数据结构为workqueue_struct:
struct workqueue_struct {
struct cpu_workqueue_struct *cpu_wq;
struct list_head list;
const char *name