我有boost :: asio庫的小問題。我的應用程序異步接收和處理數據,它創建線程並在它們中的每一個上運行io_service.run()。時間後如何檢測Asio庫的死鎖?
boost::asio::io_service io;
boost::thread_group thread_pool;
...
int cpu_cnt = get_cpu_count();
for (int i = 0; i < cpu_cnt; ++i)
{
thread_pool.create_thread(boost::bind(&run_service, &io));
}
void run_service(boost::asio::io_service* io)
{
try
{
io->run();//make fun
}
catch(const std::exception& e)
{ //process error
}
catch(...)
{ //process error
}
}
時間,我的應用程序從檢查是我的程序活着還是不是一些監管器應用接收消息(跨Windows消息系統)。如果我的應用程序不回覆,它將被重新啓動。這裏棘手的部分是檢查線程是否正在運行,而不是死鎖。我可以像這樣發佈處理程序到io_service:
io.post(&reply_to_supervisor);
但該方法隻影響一個線程。 我如何檢查所有線程是否正在運行並且沒有死鎖?
活鎖是一樣糟糕,不是嗎? – MSalters 2009-01-05 15:49:01