gpt4 book ai didi

一个线程可以打开一个套接字,而另一个线程可以关闭它吗?

转载 作者:行者123 更新时间:2023-11-30 17:58:18 28 4
gpt4 key购买 nike

我的 KLM 内的 Linux 内核中有一些内核线程。
我有一个服务器线程,它监听 channel ,一旦它看到有传入连接,它就会创建一个接受套接字,接受连接并生成一个子线程。它还将接受的套接字作为 (void *) 参数传递给子内核线程。

代码运行良好。我有一个设计问题。
假设现在必须终止线程(主线程和子线程),关闭接受套接字的最佳方法是什么。我可以看到两种方式,
1]主线程等待所有子线程退出,每个子线程退出时关闭接受套接字,最后一个子线程向主线程传递信号以使其退出。在这里,即使主线程是创建接受套接字的线程,子线程也会关闭该套接字,并且它们会在主线程退出之前执行此操作。那么这是可以接受的吗?你们在这里预见到任何问题吗?
2] 其次是主线程在退出之前关闭它创建的所有接受套接字。但可能有一种可能性(极端情况)是主线程遇到异常并且必须关闭,因此如果它在退出之前关闭接受套接字,则使用该套接字的子线程将处于危险之中。

因此我使用我提到的第一个案例。让我知道你们的想法?

最佳答案

我更喜欢选项 1,因为它是一个更干净的解决方案:当特定线程退出时,它会清理它拥有的资源(该线程确实拥有套接字,对吧?)。这样,您就不会遇到像您提到的任何可能的极端情况,其中主线程关闭可能在子线程中使用的套接字等。使用一种设计,其中子线程拥有套接字,并且是唯一一个子线程读/写/关闭它简单、干净,并带来更高的内聚力。

可以实现第二个选项,以避免出现额外逻辑和信令的极端情况,但实际上没有必要添加额外的复杂性。我总是更喜欢使用KISS principle .

至于您担心在与创建套接字不同的线程中关闭套接字:这里没有问题。文件描述符(用于套接字和其他实体)在整个进程中是唯一的。如果我们谈论的是 fork 进程,那么情况就会有所不同。

关于一个线程可以打开一个套接字,而另一个线程可以关闭它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12292932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com