我有一个多线程应用程序,但有时一个线程假设在10秒后醒来并做一些工作不会从睡眠中醒来或者正在挨饿。
只是偶尔发生。
//ACE task svc method
int svc (void)
{
while(true)
{
ACE_DEBUG((MY_INFO "sleep\n"));
sleep(10);
ACE_DEBUG((MY_INFO "awake for HB\n"));
_csender.sendHeartBeat();
}
return 0;
}
日志中的最后一行是: 2012-06-12 11:34:20.807272 | INFO | sleep
线程要么没有醒来15秒,要么在唤醒之后没有做任何工作直到第15秒,所以应用程序关闭了。
应用程序中总共有6个线程,所有线程都以相同的优先级启动。 其中一个线程非常繁忙,它接收了大量的市场数据并对其进行处理,但不会在socket上发送任何内容。上面的线程是唯一发送数据的线程,接收者和发送者线程都共享相同的套接字对象。
这是在red hat linux 5.3上。
任何想法可能是什么问题?
答案 0 :(得分:1)
'忙线程每隔2微秒打印2个ACE_DEBUG' - 因此可能会堵塞调试器的输出队列并阻止该线程进入队列'sleep \ n'。
那个,和/或你已经优先考虑这个帖子而且它不能像其他海报所说的那样获得核心。
睡眠(10)几乎是一种相关性。
答案 1 :(得分:0)
睡眠不能保证睡眠的最长时间,即您至少睡觉的时间或任何时间。我不知道预计5秒延迟是否合理,听起来太长了。
答案 2 :(得分:0)
我认为它在ACE_DEBUG中。你是否在睡觉后尝试使用冲洗的printf?