循环通过不断变化的事件列表

时间:2011-07-21 10:44:23

标签: c algorithm networking

我有一个我根据响应时间ping的机器列表。 最初,所有机器都按t毫秒进行5次。根据每台机器上这5个ping的响应时间,我调整ping的时间来拉伸或收缩,直到达到这样的配置:

machine1: t1....t2....t3....t4....t5
machine2: t1......t2......t3......t4......t5
..
machineN: ..t1..t2..t3..t4..t5
            ^
            |machine needs to be pinged at this tick

t1..tN表示时钟的(毫秒)刻度。

每台机器都有一个线程来进行ping操作是显而易见的,但由于机器的数量而不是最佳解决方案。

相反,一个通过事件的全局顺序迭代的线程是可取的,如下所示:

while(true){

  fetch_next_machine_to_be_pinged();
  ping_it();

  if(any_machine_pinged_5_times());
     reorder_events(); //adjust the time of its next 5 ping

  //continue
}

实现这一目标的最佳方法是什么? (ps:语言C)。

1 个答案:

答案 0 :(得分:3)

我会使用priority queue

任何时候,队列每台机器都会包含一个条目。条目M的“优先级”将是下次需要ping机M时的时间戳,并且有效负载将是识别机器的一些令牌(以便您知道要ping谁)。