标签: c++ multithreading mutex winsock2
我使用winsock库处理基于C ++的Networking项目。 代码是:
pexpect
我将为新线程中的每个新客户端创建一个新的 NetworkCom 对象。 所以,当我这样做时,我需要使用互斥锁来锁定类的成员函数evertime中一个线程中的对象正在使用成员函数SendData和RecieveData。
如果我必须使用互斥锁.... 有没有办法可以在没有互斥的情况下完成
答案 0 :(得分:2)
与大多数套接字API一样,Winsock不喜欢并发访问同一个套接字:
不应在同一个面向流的套接字上调用 send 同时来自不同的线程,因为有些Winsock提供者 可以将大的发送请求分成多个传输,这个 可能导致多个并发发送的非预期数据交错 请求在同一个面向流的套接字上。
send 同时来自不同的线程,因为有些Winsock提供者 可以将大的发送请求分成多个传输,这个 可能导致多个并发发送的非预期数据交错 请求在同一个面向流的套接字上。
send
从MSDN开始,recv也有类似的限制。
recv
因此,如果您在多个线程之间共享相同的套接字,则需要同步对该套接字的所有访问。互斥是实现此同步的一种方法。如果您正在为不同的线程使用不同的套接字,则只要您不在线程之间共享任何其他(可变)数据,就不需要进行同步。