【问题标题】:Can Threads Share the same Client Socket?线程可以共享同一个客户端套接字吗?
【发布时间】:2010-12-10 03:04:54
【问题描述】:

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

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

基本上我的问题是……

  • 有可能吗?
  • 它“安全”吗?

还是应该

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

delphi-7 indy-9

【问题讨论】:

  • 是的,我知道,(我猜也是 delphi 7)它在要做的事情的“清单”上;)

标签: multithreading delphi sockets delphi-7


【解决方案1】:

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

所以每个接受的连接只有一个线程。

如果您询问是否可以在接受的连接上进行多次写入/读取,您将需要锁定功能,因此会失去并行性优势。如果你想把一个很长的进程线程化,然后把结果写入socket,使用同步来按正确的顺序写入。

【讨论】:

猜你喜欢
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多