【发布时间】:2012-01-29 20:00:13
【问题描述】:
在我的应用程序中,主线程创建了两个连接线程;一种通过在循环中调用 scanf() 来等待用户输入,另一种通过在循环中调用 accept() 来侦听传入的套接字连接。新连接在分离的单独线程中处理。
我希望程序在收到 SIGINT 信号时优雅地自行关闭。这意味着侦听线程应该停止接受新连接,等待当前服务连接的线程关闭,然后再关闭。等待用户输入的线程也应该结束,从而允许主线程结束。
Scanf() 和 accept() 都阻塞但可以被信号中断,但是发送到进程的信号只能由一个线程处理(AFAIK)。我的想法是阻止所有线程中的 SIGINT 信号,除了等待它的主线程。当它收到一个 SIGINT 时,它会将 SIGUSR1 发送到两个线程(一个在 scanf() 上阻塞,一个在 accept() 上阻塞),然后加入这些线程。
这是一个好的解决方案吗?有没有更好或标准的方法来实现这一点?
【问题讨论】: