两个线程共用同一个套接字,一个读一个写,会不会有效率问题?

雷格 2012-12-17 05:28:54
我用的UDP协议。有两个线程。一个线程不停地读端口,等待客户端信息到达。令一个线程时不时(可能会很频繁)的向所有客户端发送信息。

我知道操作系统自己会对套接字描述符做同步。从这点看是不能同时有两个线程使用同一个套接字的。
可是我又得知,套接字有发送缓冲区和接收缓冲区,即发送和接收是用的不同的缓冲区。从这点看,我又觉得可以同时对一个套接字即写又读了。只要不是多个线程同时写或同时读就好了。

我的这种做法(两个线程一个读一个写同意套接字)会不会造成一个线程在使用套接字的时候,另一个线程只能在一边等待。

PS:是linux平台。应该和windows差不多吧?

求解答!!!!
...全文
793 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yakin90 2012-12-19
  • 打赏
  • 举报
回复
可以2个线程一个读,一个写同一个套接字,没有问题,你考虑效率的话可以考虑事件驱动读写操作。
雷格 2012-12-19
  • 打赏
  • 举报
回复
引用 8 楼 zhcosin 的回复:
可以,我手里的程序就是这么实现的。
UDP也可以?
子善旬 2012-12-19
  • 打赏
  • 举报
回复
setsocketopt 设置 reuse 就行
zhcosin 2012-12-19
  • 打赏
  • 举报
回复
可以,我手里的程序就是这么实现的。
雷格 2012-12-19
  • 打赏
  • 举报
回复
引用 6 楼 zhcosin 的回复:
各使用一个套接字,两个套接字绑定到同一个端口上。
这也可以?
zhcosin 2012-12-19
  • 打赏
  • 举报
回复
各使用一个套接字,两个套接字绑定到同一个端口上。
linxren 2012-12-19
  • 打赏
  • 举报
回复
引用 4 楼 leigema 的回复:
引用 2 楼 Binzo 的回复:还是得有某种同步。 不然读空或写满就不好了。 这个会阻塞
阻塞的也是自己的进程,应该没关系。或者你可以设置成nonblocking
雷格 2012-12-19
  • 打赏
  • 举报
回复
引用 2 楼 Binzo 的回复:
还是得有某种同步。 不然读空或写满就不好了。
这个会阻塞
yaya_lucky 2012-12-19
  • 打赏
  • 举报
回复
把描述符加入到epoll怎么样
Binzo 2012-12-18
  • 打赏
  • 举报
回复
还是得有某种同步。 不然读空或写满就不好了。
mymtom 2012-12-18
  • 打赏
  • 举报
回复
应该没有问题的!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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