IOCP的nOperation是否需要锁同步

IOCP中为了识别上下文的读/写状态,会在Buffer里用nOperation加以判断,那么在GCQS线程中是否需要对Buffer的nOperation做锁同步呢?

答案是:不需要。

原因如下:
在设计IOCP时,为了确保同一个套接字收发不乱序,我们会在同一时刻,保证对同一个套接字只有一个读Buffer;在同一时刻,保证对同一个套接字只有一个写Buffer。

这样,就算同一时刻对同一套接字存在读/写操作,由于是2个不同的Buffer,所以完全不需要对nOperation进行锁同步。

同一个上下文,同时最多拥有2个Buffer操作,一读一写。只有对读Buffer完成后,才能继续WSARecv下一个读Buffer;WSASend同理,如果需要提交大量的写Buffer,例如群发功能,应该利用缓冲队列+timer发送。

你可能感兴趣的:(Opera)