关于多线程下使用select(多路I/O复用)的疑问

iamtalent 2004-08-02 12:47:38
线程1
ReadFds: TFDset;
FD_ZERO(ReadFds);
FD_SET(Socket1, ReadFds);
Select(Socket1+ 1, @ReadFds, nil, nil, Timeptr);

线程2
ReadFds: TFDset;
FD_ZERO(ReadFds);
FD_SET(Socket2, ReadFds);
Select(Socket2+ 1, @ReadFds, nil, nil, Timeptr);

如果一个线程的socket收到可读状态,其他线程的select会不会一起返回?
...全文
333 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwj_dxy 2004-08-04
  • 打赏
  • 举报
回复
up
datuhao 2004-08-02
  • 打赏
  • 举报
回复
如果是同一个,那也会有问题的。
其实select不应该这样使用,很容易出问题。就使用单线程。
datuhao 2004-08-02
  • 打赏
  • 举报
回复
你两个线程中的可读集合是同一个?
iamtalent 2004-08-02
  • 打赏
  • 举报
回复
就是说Select的返回是视当前线程中定义的ReadFds中的socket数组发生状态而定,只要没把socket描述字加到这个线程的ReadFds中就不会有返回咯?是不是这个意思?

线程和线程的ReadFds是独立的,所有select也是独立的咯.两个线程同时select并不会对各自的结果有什么影响.
datuhao 2004-08-02
  • 打赏
  • 举报
回复
不过楼主的情况不同,你在不同线程中的select调用并不是监视的同一个socket,所有不存在以上情况。
datuhao 2004-08-02
  • 打赏
  • 举报
回复
of course,socket是属于进程空间的,进程下所有子线程都共享父进程的所有描述字,当一个socket可读时,从哪个线程中的select返回是不定的。

4,359

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧