首页 > 解决方案 > 在windows的多线程中使用IOCP时如何确保线程安全?

问题描述

如果我 CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 4),那么当调用 PostQueuedCompletionStatus() 时,运行 GetQueuedCompletionStatus() 的 4 个线程可能会从 GetQueuedCompletionStatus() 返回。所以如果我想通过 PostQueuedCompletionStatus() 多次发送一些数据,那么 4 个线程将有机会发送数据。那么问题是,多线程中将使用相同的套接字。它会是线程安全的吗?作为同一个套接字,我可以一直指定到同一个线程吗?

标签: iocp

解决方案


在我看来,而不是从属套接字和线程。能够在单个套接字上只运行一次 WSARecv 或 WSASend 似乎很重要。您将能够使用 _interlocked 函数使用标志变量来控制接收和发送请求。


推荐阅读