gpt4 book ai didi

c++ - closesocket 线程安全吗?

转载 作者:可可西里 更新时间:2023-11-01 13:30:23 25 4
gpt4 key购买 nike

如果我想从 1 个线程在服务器套接字上调用 closesocket() 是否安全,该线程与使用相同服务器套接字运行服务器的另一个线程分开?

最佳答案

调用本身是线程安全的,但实践不是。每当您解除分配其标识符在解除分配后可以重用的资源时,您必须与可能使用它的所有线程同步。否则,有可能在资源被释放后,一个新的资源(在你的例子中是套接字)可以分配相同的标识符(套接字号),并且打算访问(现在关闭的)服务器套接字的代码可能最终运行在不同的套接字上。

这危险的程度(以及它是否会发生)在很大程度上取决于您的代码。如果您在关闭服务器套接字后不再创建任何套接字,则可能不会发生这种情况。但这在概念上仍然是非常错误的,任何有能力审查您的代码的人都会认为这非常糟糕。

编辑:解决此类问题的方法是使用读写锁 (rwlock) 保护资源描述符(而非资源本身)。访问资源描述符(在您的情况下是保存套接字编号的整数变量)需要对其持有“读”锁,无论您是执行输入或输出还是使用它引用的资源进行其他操作。释放资源(并在保存描述符的变量中存储一个标记值,如 -1)需要一个写锁。

关于c++ - closesocket 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9861172/

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