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

时间:2010-12-10 03:04:54

标签: multithreading delphi sockets delphi-7

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

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

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

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

或者我应该

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

delphi-7 indy-9

1 个答案:

答案 0 :(得分:4)

多个线程可以读写同一个套接字。从每次accept开始,它将提取挂起连接队列上的第一个连接,创建具有相同套接字属性的新套接字,并为该套接字分配新的文件描述符。

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

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