gpt4 book ai didi

c++ - 我怎样才能在任何随机时间退出选择的系统调用?

转载 作者:太空狗 更新时间:2023-10-29 12:29:51 25 4
gpt4 key购买 nike

假设有 2 个线程,T1 和 T2。

T1 在一组套接字上进行选择,并执行相应的读/写操作。现在,如果线程 T2 想要关闭线程 T1(即加入它),那么如果 T1 在 select 系统调用上被阻塞,我该怎么做呢?如何中断选择调用?

最佳答案

如果您希望能够在线程 T1 上进行清理,更好的答案是从 T2 向自己发送一个信号(我之前使用过 USR1 信号),这将导致 select() 调用T1 返回值 EINTR。

然后您可以检查 EINTR 并知道您需要完成一些清理并执行它。在我的例子中,我有一个单独的线程,它在一个无限阻塞的 select() 中等待读取,在一个带有退出标志的 while 循环中。

while ( !exit_flag )
{
...
int select_retval = select( ... );

switch ( select_retval )
{
case EINTR:
/* clean up */
break;
default:
break;
}
}

我将从 T2 设置退出标志,然后将信号发送到 T1。然后 T1 将清理并退出循环。在我的例子中,循环是在 T1 中运行的函数,因此 T1 将结束。

关于c++ - 我怎样才能在任何随机时间退出选择的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734052/

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