在两个线程中使用一个套接字

Dej*_*jwi 11 c c++ sockets

可能重复:
同一套接字上的send/recv并行调用是否有效?

我将使用一个线程从套接字(读取)接收数据,另一个线程在整个套接字(写入)中发送数据.

在两个不同的线程中使用一个套接字是个好主意吗?

Pau*_*bel 18

跨线程共享套接字应该没有问题.如果在阅读和写作之间需要任何协调,并且可能会有,那么您将需要以某种方式同步它.

本文文件描述符和多线程程序可能会有所帮助并解决以下注释.

...用于此的套接字库应该是线程安全的,以便从一个线程中的套接字读取并支持对另一个线程中的套接字的读取...原始系统调用read()和write()支持此

套接字联机帮助页

SOCK_STREAM类型的套接字是全双工字节流

您应该能够读取和写入两个方向没有问题,一旦建立连接,方向几乎无关,至少在TCP中.

  • 虽然你说的一切都是真的,但我相信它并没有完全回答OP的问题:是否有可能在同一个套接字上同时调用`write`和`read`****? (4认同)
  • 是的,一个线程可以在另一个线程写入它的同时从套接字读取.只是不要同时读取多个线程,或者同时写入. (3认同)

Dan*_*anS 5

是的,这应该没问题。一个线程等待读取套接字而其他线程独立发送是很常见的。您可能需要注意的唯一一件事是两个线程不会同时写入