【发布时间】:2012-04-23 18:23:26
【问题描述】:
我有一个线程 A 在循环中调用 poll()。该线程负责传入和传出连接的 IO。但是,当线程 B 打开一个传出连接时,它必须以某种方式将其交给 A。您认为在线程 A(读取端)和 B(写入端)之间有一个管道,B 在打开套接字后写入该管道是个好主意吗?
【问题讨论】:
我有一个线程 A 在循环中调用 poll()。该线程负责传入和传出连接的 IO。但是,当线程 B 打开一个传出连接时,它必须以某种方式将其交给 A。您认为在线程 A(读取端)和 B(写入端)之间有一个管道,B 在打开套接字后写入该管道是个好主意吗?
【问题讨论】:
这听起来很合理。 poll 应该很高兴看到你的套接字旁边的管道。
【讨论】:
您可以考虑使用socket pair,而不是实际的管道。您可以创建一个unix-domain 套接字对并使用send() 或sendmsg() 将消息发送到阻塞线程。这种方法可能对您更方便。 Unix 域套接字还支持在进程之间传递文件描述符,尽管这对您的应用程序来说太过分了。
另一种方法是使用信号中断对poll() 的调用。见this question。
【讨论】: