IOCP的nOperation是否需要锁同步 C++

Cool.Cat 2013-08-30 2128

IOCP中为了识别上下文的读/写状态,会在Buffer里用nOperation加以判断,那么在GCQS线程中是否需要对Buffer的nOperation做锁同步呢?
答案是:不需要。
原因如下: 在设计IOCP时,为了确保同一个套接字收发不乱序,我们会在同一时刻,保证对同一个套接字只有一个读Buffer;在同一时刻,保证对同一个套接字只有一个写Buffer。
这样,就算同一时刻对同一套接字存在读/写操作,由于是2个不同的Buffer,所以完全不需要对nOperation进行锁同步。
同一个上下文,同时最多拥有2个Buffer操作,一读一写。只有对读Buffer完成后,才能继续WSARecv下一个读Buffer;WSASend同理,如果需要提交大量的写Buffer,例如群发功能,应该利用缓冲队列+timer发送。

最新回复 (0)
返回
发新帖
X