gpt4 book ai didi

c++ - 如何检测 Asio 库的死锁?

转载 作者:行者123 更新时间:2023-11-30 03:12:48 34 4
gpt4 key购买 nike

我对 boost::asio 库没有什么问题。我的应用程序异步接收和处理数据,它创建线程并在每个线程上运行 io_service.run()。

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 );

但是这个方法只影响一个线程。我如何检查所有线程是否都在运行而不是死锁?

最佳答案

我可能是错的,但是每个线程使用一个 io_service 会解决你的问题吗?

另一个想法:发布 cpu_cntreply_to_supervisor 调用,使用一点点 sleep() - 不好,但应该可以工作

关于c++ - 如何检测 Asio 库的死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355958/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com