C++ 我是否需要锁来同时使用同一应用程序两次写入套接字?

C++ 我是否需要锁来同时使用同一应用程序两次写入套接字?,c++,multithreading,sockets,C++,Multithreading,Sockets,正如您所知,写入不同线程之间的共享内存需要锁(互斥锁、信号量…) 我的C++程序负责填写 SOYSNDBUF 并将数据写入Socket(作为网络的一部分)。 在这里您可以找到代码的相关部分: getsockopt(sendsockfd, SOL_SOCKET, SO_SNDBUF, &sndBufferSize, &sbsLen); ... write(sendsockfd,buffer,sndBufferSize); 当我在同一台pc上同时运行此程序两次时(即,它变成两个具有

正如您所知,写入不同线程之间的共享内存需要锁(互斥锁、信号量…)

我的C++程序负责填写<代码> SOYSNDBUF 并将数据写入Socket(作为网络的一部分)。 在这里您可以找到代码的相关部分:

getsockopt(sendsockfd, SOL_SOCKET, SO_SNDBUF, &sndBufferSize, &sbsLen);
...
write(sendsockfd,buffer,sndBufferSize);
当我在同一台pc上同时运行此程序两次时(即,它变成两个具有两个不同套接字的不同应用程序),关于写入缓冲区,我能说些什么,它是否被视为共享内存
tcp\wmem
?因此,我应该用锁写字吗


另外,我使用的是阻塞模式。

不,在这种情况下,您不应该使用锁进行写入。想一想:如果两个不同公司编写的两个程序在写入独立套接字之前需要锁,它们如何在同一台机器上工作


即使在同一个程序中写入两个单独的套接字也不需要锁定。

不,在这种情况下,不应使用锁定进行写入。想一想:如果两个不同公司编写的两个程序在写入独立套接字之前需要锁,它们如何在同一台机器上工作


即使在同一个程序中写入两个单独的套接字也不需要锁定。

不,在这种情况下,不应使用锁定进行写入。想一想:如果两个不同公司编写的两个程序在写入独立套接字之前需要锁,它们如何在同一台机器上工作


即使在同一个程序中写入两个单独的套接字也不需要锁定。

不,在这种情况下,不应使用锁定进行写入。想一想:如果两个不同公司编写的两个程序在写入独立套接字之前需要锁,它们如何在同一台机器上工作




即使在同一个程序中写入两个单独的套接字也不需要锁定。

不清楚:这两个程序在做什么?它们是否共享一个套接字(不太可能,但在Unix上可能)?什么是“满满的都是”呢?我猜你的意思是你正在从两个不同的进程向两个不同的套接字发送数据?如果我的问题不清楚,请通知我,因为我昨天问了一个问题,但没有得到任何答案,也没有得到任何评论。这是一种什么样的套接字?TCP?Unix?UDP?Raw?亲爱的@JeremyFriesner,我正在尝试填充TCP_wmem的是TCP。@Moi:如果不同步地写入同一个TCP套接字,那将是不好的,因为来自不同线程的数据最终可能会交织在一起,使接收者没有希望再次进行排序。对于数据报套接字,至少来自独立线程的写操作将作为单独的单元输出。幸运的是,您有单独的套接字。现在还不清楚:这两个程序在做什么?它们是否共享一个套接字(不太可能,但在Unix上可能)?什么是“满满的都是”呢?我猜你的意思是你正在从两个不同的进程向两个不同的套接字发送数据?如果我的问题不清楚,请通知我,因为我昨天问了一个问题,但没有得到任何答案,也没有得到任何评论。这是一种什么样的套接字?TCP?Unix?UDP?Raw?亲爱的@JeremyFriesner,我正在尝试填充TCP_wmem的是TCP。@Moi:如果不同步地写入同一个TCP套接字,那将是不好的,因为来自不同线程的数据最终可能会交织在一起,使接收者没有希望再次进行排序。对于数据报套接字,至少来自独立线程的写操作将作为单独的单元输出。幸运的是,您有单独的套接字。现在还不清楚:这两个程序在做什么?它们是否共享一个套接字(不太可能,但在Unix上可能)?什么是“满满的都是”呢?我猜你的意思是你正在从两个不同的进程向两个不同的套接字发送数据?如果我的问题不清楚,请通知我,因为我昨天问了一个问题,但没有得到任何答案,也没有得到任何评论。这是一种什么样的套接字?TCP?Unix?UDP?Raw?亲爱的@JeremyFriesner,我正在尝试填充TCP_wmem的是TCP。@Moi:如果不同步地写入同一个TCP套接字,那将是不好的,因为来自不同线程的数据最终可能会交织在一起,使接收者没有希望再次进行排序。对于数据报套接字,至少来自独立线程的写操作将作为单独的单元输出。幸运的是,您有单独的套接字。现在还不清楚:这两个程序在做什么?它们是否共享一个套接字(不太可能,但在Unix上可能)?什么是“满满的都是”呢?我猜你的意思是你正在从两个不同的进程向两个不同的套接字发送数据?如果我的问题不清楚,请通知我,因为我昨天问了一个问题,但没有得到任何答案,也没有得到任何评论。这是一种什么样的套接字?TCP?Unix?UDP?Raw?亲爱的@JeremyFriesner,我正在尝试填充TCP_wmem的是TCP。@Moi:如果不同步地写入同一个TCP套接字,那将是不好的,因为来自不同线程的数据最终可能会交织在一起,使接收者没有希望再次进行排序。对于数据报套接字,至少来自独立线程的写操作将作为单独的单元输出。幸运的是,您有单独的套接字。您是对的,我的问题是关于填充套接字的写入缓冲区。那么,这两个接口怎么能一直填充到tcp_wmem?套接字是独立的。一个套接字的缓冲区与另一个套接字无关。好的,请您详细解释一下tcp_wmem在极高速率(即wmem_max)下会发生什么情况?当缓冲区填满时,发送将被阻止。也就是说,发送程序将“挂起”,直到缓冲区耗尽。你是对的,我的问题是关于填充套接字的写入缓冲区。那么,这两个接口怎么能一直填充到tcp_wmem?套接字是独立的。一个套接字的缓冲区与另一个套接字无关。好的,请您进一步解释一下tc会发生什么情况