我的 KLM 内部有一些 Linux 内核中的内核线程。
我有一个服务器线程,它监听通道,一旦它看到有一个传入连接,它就会创建一个接受套接字,接受连接并产生一个子线程。它还将接受的套接字作为 (void *) 参数传递给子内核线程。
代码工作正常。我有一个设计问题。
假设现在必须终止线程,主线程和子线程,关闭接受套接字的最佳方法是什么。我可以看到两种方法,
1]主线程等待所有子线程退出,每个子线程在退出时关闭接受套接字,最后一个子线程将信号传递给主线程以使其退出。在这里,即使主线程是创建接受套接字的线程,子线程也会关闭该套接字,并且它们会在主线程退出之前执行此操作。那么这是可以接受的吗?你们在这里预见到任何问题吗?
2] 其次是主线程在退出之前关闭它创建的所有接受套接字。但是可能存在(极端情况)主线程出现异常并且必须关闭的可能性,因此如果它在退出之前关闭接受套接字,则使用该套接字的子线程将处于危险之中。
因此,我使用的是我提到的第一个案例。让我知道你们的想法?