进程调度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
函数的作用和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
相关文章推荐
- 进程调度API之add_wait_queue/remove_wait_queue
- 进程调度API之prepare_to_wait/prepare_to_wait_exclusive
- 进程调度API之prepare_to_wait
- 进程调度API之preempt_count_add/preempt_count_sub
- 进程调度API之wait_for_completion_x
- 进程调度API之preempt_count_add(val)/preempt_count_sub(val)
- 进程调度API之finish_wait
- 进程调度API之cond_resched
- 进程调度API之should_resched
- 进程调度API之set_cpus_allowed_ptr
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- linux内核设计与实现2》add_wait_queue(q,&wait)
- 进程调度API之preempt_notifier_register/preempt_notifier_unregister
- 进程调度API之__wake_up_sync
- 进程调度API之set_user_nice
- 进程调度API之sleep_on_spinunlock
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- 进程调度API之preempt_schedule
- 进程调度API之complete_all
- 进程调度API之complete