【发布时间】:2013-12-30 16:16:36
【问题描述】:
使用 LINKED LIST 存储重叠结构是个好主意吗?
我的重叠结构是这样的
typedef struct _PER_IO_CONTEXT
{
WSAOVERLAPPED Overlapped;
WSABUF wsabuf;
....
some other per operation data
....
struct _PER_IO_CONTEXT *pOverlappedForward;
struct _PER_IO_CONTEXT *pOverlappedBack;
} PER_IO_CONTEXT, *PPER_IO_CONTEXT;
当 iocp 服务器启动时,我在链接列表中分配(例如)其中的 5000 个。此列表的开头存储在全局变量 PPER_IO_CONTEXT OvlList 中。我必须补充一点,我只在必须向所有连接的客户端发送数据的情况下使用这个链表。 当 Wsasend 发布或 GQCS 收到通知时,更新链表(我使用 EnterCriticalSection 进行同步)。 提前感谢您对更好的存储(缓存)重叠结构的提示、意见和建议。
【问题讨论】:
-
为什么不使用内置的数据结构,如向量或包/集?您是否仅限于 C 语言?
-
@usr 我不限于 C,但我的编程技能仍然很小,我需要一些更好的程序员的建议。 Vector?,我可以在多线程服务器中使用它吗?同步呢?
-
您还必须同步对自定义链表的访问。那里没有区别。通过自己构建所有东西,你会让你的工作变得更难,而不是更容易。尝试从更高的层次思考,而不是构建自己的数据结构。
-
我只是将这些东西推到一个传统的线程安全的生产者-消费者队列中,作为一个池。
-
如果我正在构建一个,我可能会使用双端队列 - 只需要访问末端,(带有临界区和信号量)。
标签: multithreading iocp overlapped-io