当我想跟踪主动连接时,将它们保存到链接列表中还是直接到某个数组中代表连接的ID?我想防止可能的种族状况问题,例如:

  • 列表中的连接数量很大
  • 有人开始搜索列表末尾的连接
  • 同时,在搜索过程中,连接已分离
有帮助吗?

解决方案

该结构应具有连接句柄(套接字),参考计数和标志,该标志应关闭连接并尽快删除对象。无论该容器是什么,它都必须具有同步机制(临界部分),以进行搜索/插入/删除,以及GetReference/Release Logic。如果提高关闭标志,则GetReReference函数应返回null。根据搜索条件的不同,您可能需要更多的getReference(连接对象都应该具有所有可以帮助它在容器中找到的值)。如果在容器中不存在GetReReference函数,则可以创建新对象。

释放函数应关闭连接并从容器中删除对象,如果关闭标志被凸起并将参考计数删除至零。但是释放 禁止 关闭关键部分中的连接,因为这可以是耗时的操作(取决于 优雅的关闭和挥之不去的选项)。释放应输入CS,减少参考计数,如果为零,请留下CS,关闭连接,再次输入CS,然后从容器中删除对象并将其删除。因为升级的旗帜升高了,所以参考数不会在两个CS之间提出。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top