【发布时间】:2011-10-18 03:05:16
【问题描述】:
我有一个循环运行的 pthread,以阻塞方式调用 accept()。有什么办法可以中断来自另一个线程的调用?一切都指向向线程发送信号,但显然您只能向进程发送信号。
我不能直接杀死线程,因为它会使套接字保持打开状态。无论如何,这不是很干净。真的没有办法吗?
【问题讨论】:
标签: linux pthreads signals interrupt system-calls
我有一个循环运行的 pthread,以阻塞方式调用 accept()。有什么办法可以中断来自另一个线程的调用?一切都指向向线程发送信号,但显然您只能向进程发送信号。
我不能直接杀死线程,因为它会使套接字保持打开状态。无论如何,这不是很干净。真的没有办法吗?
【问题讨论】:
标签: linux pthreads signals interrupt system-calls
您可以使用pthread_kill(3) 向线程发送信号。
pthread_kill()函数将信号 sig 发送到线程,另一个 线程在与调用者相同的进程中。如果安装了信号处理程序,该处理程序将在 线程线程。
注意,你不必杀死线程;您可以发送一个信号,使accept 以EINTR 失败。
【讨论】:
要么使用select(),要么将信号发送到进程(如果您只想中断其中一个线程,这将是一个问题)。
【讨论】: