Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94455
  • 博文数量: 19
  • 博客积分: 1471
  • 博客等级: 上尉
  • 技术积分: 272
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 19:48
文章分类

全部博文(19)

文章存档

2011年(2)

2010年(17)

分类: LINUX

2011-01-19 19:28:59

初步分析:
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) |
给主人留下些什么吧!~~