0
在閱讀Linux的源代碼,我已閱讀以下代碼:
非獨佔等待隊列添加進程頭朝下而獨佔尾巴,爲什麼?
void fastcall add_wait_queue(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(q, wait);
spin_unlock_irqrestore(&q->lock, flags);
}
EXPORT_SYMBOL(add_wait_queue);
void fastcall 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);
}
EXPORT_SYMBOL(add_wait_queue_exclusive);
所不同的是__add_wait_queue之間()和__add_wait_queue_tail()。
爲什麼這個步驟中的實現有所不同?
感謝您的回答。看起來,等待隊列是雙鏈表,因爲我的版本2.6.11。 – wilsonwen
@wilsonwen:它可能只是在訂單不重要的情況下,看起來更多的默認版本。 –