使用 IOCP 时从两个线程调用 WSASend() 和 WSARecv() 是否安全?
Is calling WSASend() and WSARecv() from two threads safe when using IOCP?
基于此article,从多个线程调用WSASend()
或WSARecv()
是不安全的。但是,从两个线程同时调用 WSASend()
和 WSARecv()
是否安全?
在一个线程中从一个套接字读取同时在另一个线程中写入同一个套接字总是安全的。涉及单独的内核缓冲区。无论您使用的是阻塞、非阻塞、重叠还是 IOCP I/O 逻辑。
不安全的是在多个线程中同时从同一个套接字读取,或者在多个线程中同时写入同一个套接字。这需要线程之间的同步,以便它们的 transmitted/received 数据不会相互重叠。
基于此article,从多个线程调用WSASend()
或WSARecv()
是不安全的。但是,从两个线程同时调用 WSASend()
和 WSARecv()
是否安全?
在一个线程中从一个套接字读取同时在另一个线程中写入同一个套接字总是安全的。涉及单独的内核缓冲区。无论您使用的是阻塞、非阻塞、重叠还是 IOCP I/O 逻辑。
不安全的是在多个线程中同时从同一个套接字读取,或者在多个线程中同时写入同一个套接字。这需要线程之间的同步,以便它们的 transmitted/received 数据不会相互重叠。