gpt4 book ai didi

c++ - 如何从另一个线程唤醒没有超时时间的 Select 调用

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:59 25 4
gpt4 key购买 nike

我正在寻找在 C++ 中唤醒 select 调用的解决方案,根据应用程序要求,由于使用 select 系统调用的多个线程,我无法设置超时。

请参阅下面的场景。

我想唤醒在其他线程上等待的选择系统调用。我尝试从主线程在线程上写入数据,但仍然无法唤醒它。

如果该线程上有空数据,我想关闭线程和套接字。

如果套接字连接与其他进程关闭,则唤醒选择调用,但不与线程一起使用。

有人对此有想法吗

最佳答案

在最近的Linux上,您可以在一般的一切上使用eventfd - 管道,用法 - 在选择器中注册管道的一侧以提高可读性以及实际的套接字,以唤醒选择器 - 只需将一个字节写入管道的另一端。或者(如果您的 libc 有)您可以使用带有 sigmask 的 pselect 来捕获 ALRM 信号,并在需要唤醒选择器时引发该信号。在多线程应用程序中使用信号方法时要非常小心(如“我不会使用”),因为如果做得不正确,信号可能会传递到随机线程。

关于c++ - 如何从另一个线程唤醒没有超时时间的 Select 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36400183/

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