初步分析:
workqueue设计的目的,为内核小人物提供一个统一的接口,避免了用户自己创建内核线程,所以workqueue内核还是要自动给你创建好内核线程的,线程的数量:一种类型的workqueue只需要创建与cpu core一样数目的线程个数就行了,多了无益。 还有一个重中之重的功能就是: 提供一个防止代码的与否的机制,如果使用了workqueue提高的同步机制,用户提交的worker则不需要加锁防止重入引起的不一致行问题。
struct workqueue_struct {
unsigned int flags; /* I: WQ_* flags */
union {
struct cpu_workqueue_struct __percpu *pcpu;
struct cpu_workqueue_struct *single;
unsigned long v;
} cpu_wq; /* I: cwq's */
struct list_head list; /* W: list of all workqueues */
struct mutex flush_mutex; /* protects wq flushing */
int work_color; /* F: current work color */
int flush_color; /* F: current flush color */
atomic_t nr_cwqs_to_flush; /* flush in progress */
struct wq_flusher *first_flusher; /* F: first flusher */
struct list_head flusher_queue; /* F: flush waiters */
struct list_head flusher_overflow; /* F: flush overflow list */
mayday_mask_t mayday_mask; /* cpus requesting rescue */
struct worker *rescuer; /* I: rescue worker */
int saved_max_active; /* W: saved cwq max_active */
const char *name; /* I: workqueue name */
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
阅读(2184) | 评论(0) | 转发(0) |