当前位置: 技术问答>linux和unix
同多个线程通过同一个socket发送数据,操作系统底层会同步每个发送操作吗
来源: 互联网 发布时间:2016-06-04
本文导语: 最近写了一个网络通过框架,在运行过程中,在同一时刻,多个线程通过同一个socket发送数据到服务端发送数据到服务器,程序在VMWARE上一切正常,但到实际机器上偶尔出现收到的数据内容错误的情况(在通信量比较...
最近写了一个网络通过框架,在运行过程中,在同一时刻,多个线程通过同一个socket发送数据到服务端发送数据到服务器,程序在VMWARE上一切正常,但到实际机器上偶尔出现收到的数据内容错误的情况(在通信量比较大的时候,多个线程通过该连接每秒发送几千个消息包,操作系统:REHL5)。请问一下,同多个线程通过同一个socket发送数据,操作系统底层会同步每个发送操作吗
|
貌似操作系统不会维护这个操作的同步处理的 ...
在 vmware 中运行时,因为受限于客观环境,它的数据流量一般较小,
所以不容易出现错误。
而在真实主机上运行时,它的数据流量一大,就容易出错。
在这种情况下,貌似你应该使用互斥锁之类的来自己维护线程间的同步
操作 ...
在 vmware 中运行时,因为受限于客观环境,它的数据流量一般较小,
所以不容易出现错误。
而在真实主机上运行时,它的数据流量一大,就容易出错。
在这种情况下,貌似你应该使用互斥锁之类的来自己维护线程间的同步
操作 ...
|
如果多个线程对同一个Socket进行抄作,则必须自己维护同步,否则必然出现楼主说的现象。
|
干嘛要用5000个锁啊?一个锁就够了啊。或者用semaphore
|
多个线程同时操作同一个socket口?只accept一次, 然后多个线程来操作?第一次听说,楼主你这样做有意义吗?
send跟recv这些操作需要多线程吗?
如果要做并发,就开启多条连接,用多线程并发实现,或者select,epoll模型也可以。