线程可以共享同一个客户端套接字吗?

Chr*_*ase 7 sockets delphi multithreading delphi-7

我使用TClientSocket或indy的TIdTCPClient(取决于项目)

我有几个Threads每个处理项目,有时需要通过连接的客户端套接字发送数据.(数据读取形式的套接字不用于处理线程)

基本上我的问题是......

  • 有可能吗?
  • 它"安全"吗?

或者我应该

  • 每个线程或一个客户端套接字
  • 某些编组/关键部分

delphi-7 indy-9

Jul*_*rra 4

多个线程可以读取和写入同一个套接字。因为每次您accept,它都会提取挂起连接队列中的第一个连接,创建一个具有相同套接字属性的新套接字,并为该套接字分配一个新的文件描述符。

因此每个接受的连接只有一个线程。

如果您询问是否可以在接受的连接上进行多次写入/读取,则您将需要锁定功能,从而失去并行性优势。如果要线程化一个长进程,然后将结果写入套接字,请使用同步以正确的顺序写入。