gpt4 book ai didi

c - 新Linux内核的epoll是否还存在惊群问题?

转载 作者:太空狗 更新时间:2023-10-29 11:04:31 24 4
gpt4 key购买 nike

我看到内核源码中的fs/eventpoll.c是这样写的:

static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
int maxevents, long timeout)
{
....
init_waitqueue_entry(&wait, current);
__add_wait_queue_exclusive(&ep->wq, &wait); // *** NB
....
}

“独占”是否意味着只有一个等待项(用户空间中的进程或线程)会被唤醒?

但是当我写一些测试代码时,我看到 thundering herd problem仍然存在。

为什么无法解决?谢谢!

最佳答案

在内核代码中,我们可以在 include/linux/wait.h 中看到 __add_wait_queue_exclusive() 将条目添加到列表的头部:

 __add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait)
{
wait->flags |= WQ_FLAG_EXCLUSIVE;
__add_wait_queue(q, wait);
}

当谈到唤醒 sched/wait.c 中的 static void __wake_up_common() 时,确实只唤醒第一个非独占任务和第一个独占任务。所以通常只有一个任务被唤醒。

关于c - 新Linux内核的epoll是否还存在惊群问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com