如果其对象在多个线程中运行,我们是否需要锁定类成员函数

时间:2017-09-16 14:31:27

标签: c++ multithreading mutex winsock2

我使用winsock库处理基于C ++的Networking项目。 代码是:

pexpect

我将为新线程中的每个新客户端创建一个新的 NetworkCom 对象。 所以,当我这样做时,我需要使用互斥锁来锁定类的成员函数evertime中一个线程中的对象正在使用成员函数SendData和RecieveData。

如果我必须使用互斥锁.... 有没有办法可以在没有互斥的情况下完成

1 个答案:

答案 0 :(得分:2)

与大多数套接字API一样,Winsock不喜欢并发访问同一个套接字:

  不应在同一个面向流的套接字上调用

send   同时来自不同的线程,因为有些Winsock提供者   可以将大的发送请求分成多个传输,这个   可能导致多个并发发送的非预期数据交错   请求在同一个面向流的套接字上。

MSDN开始,recv也有类似的限制。

因此,如果您在多个线程之间共享相同的套接字,则需要同步对该套接字的所有访问。互斥是实现此同步的一种方法。如果您正在为不同的线程使用不同的套接字,则只要您不在线程之间共享任何其他(可变)数据,就不需要进行同步。