如何告诉当前或即将在poll()中阻塞的线程做某事?

时间:2012-04-23 18:23:26

标签: c++ linux pthreads pipe

我有一个在循环中调用poll()的线程A.此线程负责传入和传出连接上的IO。但是,当线程B打开传出连接时,它必须以某种方式将其提供给A.你认为在打开套接字后B写入的线程A(读取端)和B(写入端)之间有一个管道是不是一个好主意?

2 个答案:

答案 0 :(得分:4)

这听起来很合理。 poll应该很高兴看到你的插座旁边的管道。

答案 1 :(得分:1)

您可以使用socket pair而不是实际的管道。您可以创建unix-domain套接字对,并使用send()sendmsg()向阻止的线程发送消息。这种方法对您来说可能更方便。 Unix域套接字也支持在进程之间传递文件描述符,尽管这对你的应用程序来说太过分了。

另一种方法是用信号中断对poll()的调用。请参阅this question