我遇到join()
对象上调用boost::thread
会引发thread_resource_error
异常的情况。看documentation,没有提到这种方法会引发这样的例外。
我不太确定从哪里开始调试。关于可能导致这种情况的任何建议?
答案 0 :(得分:1)
查看boost源代码,我发现了以下内容:
void thread::join()
{
if (this_thread::get_id() == get_id())
{
boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
}
detail::thread_data_ptr local_thread_info=(get_thread_info)();
if(local_thread_info)
{
this_thread::interruptible_wait(local_thread_info->thread_handle,detail::timeout::sentinel());
release_handle();
}
}
所以基本上它有一些未记录的行为,如果一个线程试图加入自己,它会抛出一个thread_resource_error
。