gpt4 book ai didi

c++ - pthread_kill() 与 pthread_cancel() 终止因 I/O 而阻塞的线程

转载 作者:太空狗 更新时间:2023-10-29 11:40:38 26 4
gpt4 key购买 nike

在我们的服务器代码中,我们使用 poll() 系统调用来监控客户端套接字。使用较大的超时值调用 poll()。因此调用 poll() 的线程因 I/O 而被阻塞。

根据流程,我们有一个场景,我们需要从另一个线程终止在 poll() 中阻塞的线程。我遇到过 pthread_kill() 和 pthread_cancel() 函数,它们可以终止因 I/O 而阻塞的目标线程。

通过阅读手册页,这两个函数似乎都能正常工作。互联网上很少有链接表明这两种功能使用起来都很危险。

有没有其他方法可以终止因 I/O 而阻塞的线程?如果没有,建议使用这些功能中的哪一个。

最佳答案

一个简单而干净的选择是创建一个“信号”管道。也就是说,调用 pipe,获取“读取”端的文件描述符并将其添加到 poll 文件描述符列表(使用 POLLIN ).然后,每当你想解除阻塞正在等待 poll 的线程时,只需将一个字节写入管道的写端即可。接收到数据的管道将在阻塞的线程中以可读状态返回。您甚至可以通过改变写入字节的值来指定不同的“命令”。

(当然,您需要先从管道中读取字节,然后才能重新使用它。)

关于c++ - pthread_kill() 与 pthread_cancel() 终止因 I/O 而阻塞的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52391701/

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