多线程相关问题
写了一个监控网络阻断的小程序,代码概要如下:
//对每个监控IP,开启一个线程,里面进行while循环
Ping ping = new ping();
while(true)
{
pingreply1 = ping.send(IP);
sleep(XX);
pingreply2 = ping.send(IP);
dang reply1和2都不是success的时候,就告警
}
当监控IP比较少的时候,没有问题,但是如果监控地址较多,如20个,在运行较长时间后如24小时后,时不时就会出现连续两个timeout,然后程序告警,但是通过我直接在控制台中监测这个IP,发现虽然有丢包,但是连续丢两个的情况极少,望大家帮忙分析下原因,还有就是给想个控制多个线程不要同时执行的办法。
我个人是想弄个flag,然后再开一个线程修改flag的值,还有没的更好,更简单的办法呢
while(true)
{ if(flag)
{ pingreply1 = ping.send(IP);
sleep(XX);
pingreply2 = ping.send(IP);
dang reply1和2都不是success的时候,就告警
}
else
{
sleep(XX)
}
}
我个人猜测:会不会是两个线程同时发起了Ping.send,导致其中一个timeout?
多线程?冲突
------解决方案--------------------会不会是两个线程同时发起了Ping.send,导致其中一个timeout? 应该不会吧,你不使用了 pingreply1 、 pingreply2两个对象来send吗
------解决方案--------------------我突然想到一个问题,如果用一台PC大量的产生线程去ping另一台PC,会使另一台PC网络阻塞吗?
------解决方案--------------------用锁就不会同时执行了
建议改用SendAsync看
------解决方案--------------------如果是通信端口阻塞的原因,可以考虑异步模式,使用队列控制对端口的访问,这样就不会后资源冲突的情况发生了。
------解决方案--------------------直接使用Time控件,每隔一段时间执行一次不就好了吗?