读书人

两个线程共用同一个套接字一个读一个

发布时间: 2013-01-05 15:20:39 作者: rapoo

两个线程共用同一个套接字,一个读一个写,会不会有效率问题?
本帖最后由 leigema 于 2012-12-17 23:29:12 编辑 我用的UDP协议。有两个线程。一个线程不停地读端口,等待客户端信息到达。令一个线程时不时(可能会很频繁)的向所有客户端发送信息。

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

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

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

求解答!!!!
[解决办法]
应该没有问题的!
[解决办法]
还是得有某种同步。
不然读空或写满就不好了。
[解决办法]
把描述符加入到epoll怎么样
[解决办法]

引用:
引用:还是得有某种同步。
不然读空或写满就不好了。
这个会阻塞

阻塞的也是自己的进程,应该没关系。或者你可以设置成nonblocking
[解决办法]
各使用一个套接字,两个套接字绑定到同一个端口上。
[解决办法]
可以,我手里的程序就是这么实现的。
[解决办法]
setsocketopt 设置 reuse 就行
[解决办法]
可以2个线程一个读,一个写同一个套接字,没有问题,你考虑效率的话可以考虑事件驱动读写操作。

读书人网 >C语言

热点推荐