线程间数据传递-多线程处理队列CXMulThreadQueue(IOCP实现)
在文章《线程间数据传递–多对多队列CXMulToMulQueue》中给出了一种多对多队列CXMulToMulQueue的实现,所有入队和出队使用同一个锁,当数据传递频繁时多个线程访问队列必然会导致锁竞争。
完成端口函数PostQueuedCompletionStatus(HANDLE, DWORD, ULONG_PTR, LPOVERLAPPED)传递的后三个参数会被函数GetQueuedCompletionStatus(HANDLE, LPDWORD, PULONG_PTR, LPOVERLAPPED, DWORD)原封不动的接收到,完成端口不会对这三个参数做任何操作,其中特别指出LPOVERLAPPED可以不是指向OVERLAPPED结构的指针。利用这个特性,把需要传递的数据地址直接投递到完成端口,由完成端口内部做访问互斥处理,可以有效减少由于锁竞争导致的耗时。
阅读剩余部分 –