您的位置:首页 > 产品设计 > UI/UE

进程调度API之add_wait_queue_exclusive

2017-12-13 14:11 731 查看
void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait)

函数的作用和add_wait_queue的区别在与add_wait_queue_exclusive会设置flag WQ_FLAG_EXCLUSIVE

表明此进程是高优先级的进程。

void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait)

{

unsigned long flags;

 

wait->flags |= WQ_FLAG_EXCLUSIVE;

spin_lock_irqsave(&q->lock, flags);

__add_wait_queue_tail(q, wait);

spin_unlock_irqrestore(&q->lock, flags);

}

首选设置WQ_FLAG_EXCLUSIVE,然后调用__add_wait_queue_tail 将wait 添加到head的最后.

static inline void __add_wait_queue_tail(wait_queue_head_t *head,

 wait_queue_t *new)

{

list_add_tail(&new->task_list, &head->task_list);

}

与之对应的是__add_wait_queue_exclusive,同样会设置WQ_FLAG_EXCLUSIVE,但是会把wait添加到q的

最前面。

static inline void

__add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait)

{

wait->flags |= WQ_FLAG_EXCLUSIVE;

__add_wait_queue(q, wait);

}

这里要注意__add_wait_queue_exclusive调用__add_wait_queue的时候没有像add_wait_queue_exclusive

一样加锁,因此__add_wait_queue_exclusive 只能用于wake one thread
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: